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

转载于:https://www.cnblogs.com/ajunyu/p/10955109.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值