Linux下Python的安装以及注意事项(2)

变量赋值的实质其实就是用某个别名将指针指向内存中某一块区域的存储的数据库,这里两个例子的别名依次为name1和name2,分别指向的内存中的对应位置的数据块(wupeiqi,alex)

在第二种情况变量复制中,如果修改name1的值,name2值是否会变化呢?这里我们通过实验来证明:

>>> name1="wupeiqi"

>>> name2=name1

>>> name2

'wupeiqi'

>>> name1="alex"

>>> name2

'wupeiqi'

>>> name1

'alex'

>>>

通过以上实验,得出结果,变量name2的值在变量name1发生变化时并不会随着name1而变化,因为变量的实质是存储在内存中数据的别名,而别名是通过指针指向内存中的数据块,当变量name1赋值为"alex"时,其实是将name1的指针指向内存中新开辟的数据块“alex”,而变量name2仍然指向原来的数据块“wupeiqi”,所以变量name2的值没有发生变化。

在Python中,如果要用字符串相加,即:"hello"+"sb"+"alex"这样的形式,

其实是在内存中一次开辟空间"hello"、“hello”+“sb”、"hello"+"sb"+“alex”等空间,而最终有用的空间为“hello”+“sb”+“alex”这一块,而其他的则内存空间处于浪费状态,这里就要用Python的虚拟机垃圾回收功能,而对于Python、Java这些高级语言来说,对于程序员一般不用去关心垃圾回收,这些都自动交给了对应的虚拟机来完成。

另外对于:

name1="wupeiqi"

name2="wupeiqi"

实质上name1和name2指向内存中的两个数据块中的,内容都为“wupeiqi”,但是有人说id("name1")和id(name2)地址空间一样,其实Python相对于C语言而言,对内存寻址做了优化,对于常用的而且数据相同的内容都放在同一个地址空间内(或者地址段内),但是当数据长度达到一定的数量级之后,虽然内容相同但是内存地址也就会不相同,因为Python有一个内存地址的缓冲区,可以理解为如果数据相同而且数据长度小于等于内存缓冲区的长度,那么他们的内存地址表现为相同,否则就不同;这里可以用两个列子来说明:

>>> name1="wupeiqi"

>>> name2="wupeiqi"

>>> id(name1)

140084306598864

>>> id(name2)

140084306598864

>>> a=142584756214225512155212464431641346573.

>>> b=142584756214225512155212464431641346573.

>>> id(a)

25671328

>>> id(b)

25671352

>>>

如上例所述,因为name1和name2指向的数据块长度在Python地址空间缓冲区内,所以name1和name2的地址相同,而a和b的值已经超出了Python地址空间的缓冲区长度大小,所以显示出两个地址不同,其实如上例所示的两个变量赋值相同,其实质就是在内存中开辟两块完整相同的数据块进行存储他们,而不是一块数据指向两个变量。

下面关于Python的文章您也可能喜欢,不妨看看:

Python:在指定目录下查找满足条件的文件 

Python2.7.7源码分析 

无需操作系统直接运行 Python 代码 

CentOS上源码安装Python3.4 

《Python核心编程 第二版》.(Wesley J. Chun ).[高清PDF中文版]

《Python开发技术详解》.( 周伟,宗杰).[高清PDF扫描版+随书视频+代码]

Python脚本获取Linux系统信息

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/15801.html