鱼C论坛

 找回密码
 立即注册
查看: 2873|回复: 0

[技术交流] Python核心之动态类型解析——入门必备系列

[复制链接]
发表于 2014-4-21 10:29:07 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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同时被改变了。


(如有疑问或建议请回帖说明)







想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-29 05:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表