记录学习笔记和心得,参考书籍《Python学习手册》。
什么是动态类型
python创建变量时不需要声明数据类型,会自动识别数据的类型。这意味着类型没有与变量绑定,而是属于对象。每一个对象都有两个标准的头部信息:类型标识符和引用计数器,前者用于确定对象的类型,后者用于垃圾回收机制。
对象的垃圾回收机制
python中变量只是对对象的引用,实际上是一个指针指向了对象的内存空间。每次对象被引用,引用计数器都会增加引用数目,当引用次数降为0时,python会自动清理无引用对象,释放对象空间。python也有一部分组件可以及时的检测并回收带有循环引用的对象。
共享引用
对于数字、字符串和元组而言,不同变量引用同一对象,指向同一内存空间。当修改其中某个变量时,会创建一个新的对像和新的引用,对原来对象以及其他变量引用没有影响。
>>>a = 12
>>>b = a
>>>a = 22
>>>b
12
>>>a
22
但是对列表这样的可变数据类型,更改其中一个变量的值,会在原位置更改对象内容,影响其他引用。
>>>L = [1,2,3]
>>>M = L
>>>M[0] = 4
>>>M
[4,2,3]
>>>L
[4,2,3]
有一点值得注意,python为了执行速度,会缓存并复用小的整数和字符串,这意味着创建不同相等值的对象时,python会把相应变量指向同一个对象。不过这对代码没有影响,因为不能在原位置改变整数和字符串。
>>>L = [1,2,3]
>>>M = [1,2,3]
>>>L == M
True
>>>L is M
False
# 新对象
>>>x = 42
>>>y = 42
>>>x == y
True
>>>x is y
True
# 缓存复用