一、可变和不可变类型
- 可变类型:在id不变的情况下,value可以变,则称为可变类型,如列表,字典
- 不可变类型:value一旦改变,id也改变,则称为不可变类型(id变,意味着创建了新的内存空间)
1 可变类型 (列表,字典)
列表:
l1 = ['a','b','c']
print(id(l1))
l1[0] = 'd'
print(l1)
print(id(l1))
输出:
27280848
['d', 'b', 'c']
27280848
字典:
info = {
'name':'xxx',
'age': 19
}
print(id(info))
info['name'] = 'sss'
print(id(info))
输出:
46557440
46557440
2 不可变类型(整型,字符串,元组,集合)
整数:
i = 123
print(id(i))
i = 321
print(id(i))
输出:
1366941776
45610832
字符串:
str1 = 'aaa'
print(id(str1))
str1 = 'bbb'
print(id(str1))
输出:
51096736
51112224
元组:
t1 = (1,2,3)
print(id(t1))
t1 = (3,2,1)
print(id(t1))
输出:
52187624
52187704
集合:
set1 = {1,2,3,4}
print(id(set1))
set1 = {1,2,3,4}
print(id(set1))
输出:
56748072
56747952
二、引用计数和垃圾回收机制
- 当一个程序执行完毕后,回收变量所占用的内存
- 当引用计数变为0时,回收变量所占用的内存