1. 可变与不可变类型
1.1 可变类型
在id不变的情况下,value可以改变,则称之为可变类型。列表、字典与集合是可变的。
l1 = [1,2,3,4,5] print(id(l1)) l1[1] = 520 #改变列表元素 print(id(l1)) result: 1700748379208 #id不变 1700748379208 info = {'name':'言念君子'} print(id(info)) info['name']='温润如玉' print(id(info)) result: 1953426847424 1953426847424 s1 = {'a','b','c','d'} print(id(s1)) s1.add('zxj') print(id(s1)) result: 2428508547336 2428508547336
1.2 不可变类型
value一旦改变,id也改变(id改变意味着创建了新的内存)。整数、浮点数、字符串、元组是不可变类型。
l1 = ['a','c'] tu = (1,2,3,l1) print(tu , id(tu)) l1[1]='zxj' print(tu,id(tu)) result: (1, 2, 3, ['a', 'c']) 1921112815480 (1, 2, 3, ['a', 'zxj']) 1921112815480
2. 引用计数
引用计数即对一个变量值的引用次数,如:
a = 10
b = 10
变量10被引用了2次。
3. 垃圾回收机制
定义变量并不会占用内存,只有在运行变量类型的时候才占用内存,运行完毕后需要释放内存,解除占用。Python存在一种机制会回收这种占用的内存,即垃圾回收机制。垃圾回收机制在一下两种情况下会回收内存:
1>程序执行完毕后id被回收;
2>引用计数为0后id被回收。