|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 sidfate 于 2014-4-22 21:23 编辑
动态类型解析:
从对一个简单赋值语句的分析开始:
>>> a = 3
Python在做什么:
(1) 创建一个对象来代表3;
(2) 创建一个变量a,如果它还么有创建的话;
(3) 将变量a与对象3相连接。
用具体的术语来描述:
(1) 变量是一个系统表的元素,拥有指向对象的连接的空间;
(2) 对象是分配的一块内存,有足够的空间去表示它们所代表的值;
(3) 引用是自动形成的变量与对象的连接(以内存中的指针形式实现)。
有类型的是对象,而不是变量:
每一个对象都有两个标准的头部信息:一个类型标识符去标识这个对象的类型,一个引用计数器。Python中的变量就是在特定的时间引用了特定的对象。
对象回收机制:
一般来讲,当一个对象的引用计数器标识为零时,对象会被回收。同时,Python会缓存并复用小的整数和小的字符串。
例如:
>>> x = 42
>>> y = 42
>>> x == y
True
>>> x is y # is操作符用来检查对象的同一性(即两个变量是否指向同一对象)
True
共享引用:
共享引用——多个变量名引用了同个对象。
例如:
>>> x = 3
>>> y = x
# 此时x与y指向同一个对象3
>>> x = 4
# 此时x指向了新对象4,但是y还是指向对象3
对于修改列表对象的探讨:
例如:
>>> list1 = [ 1 , 2 , 3 ]
>>> list2 = list1
>>> list1 = 1
# 此时list1指向新对象1,list2还是指向列表[1,2,3]
>>> list1 = list2
# 回到最初状态
>>> list1[1] = 100
>>> list1
[1,100,3]
>>> list2
[1,100,3]
# 首先list1和list2指向的是一个列表对象(列表本身也是一个对象),该列表包含了对#象1、对象2和对象3,在列表中的元素是通过它们的位置进行索引的,所以list1[1]引用#对象2。上面的例子中改变了list1所引用的对象的一个元素,即list1[1]引用了新对象#100.因为列表对象与其他对象共享的,所以list1和list2同时被改变了。
(如有疑问或建议请回帖说明)
|
|