Python可变与不可变类型及垃圾回收机制

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被回收。

posted @ 2019-05-29 14:37  Ajunyu  阅读(227)  评论(0编辑  收藏  举报