小整数对象池(-5到256)以及python赋值优化机制

在Python中,有一段特殊的整数,它们经常在python中被使用到,为了防止重复创建导致内存的增加,在python启动时,事先已经创建好了这些对象,放入到小整数对象池中,供开发者使用。当给变量赋值-5到256之间的数值时,其本质是对小整数对象池中对象的引用。

#创建两个变量,都是256(在小整数对象池中),可以看到a,b两个变量的id是一样的,赋值的过程即是对对象256内存id的引用过程
a = 256
b = 256
print(id(a),id(b))
1965754272 1965754272

#当给变量赋值不在小整数对象池中的数字(257)时,可以看到a,b的id是不一样的,此时赋值的过程即是对象创建的过程
#a先申请一个内存id,创建257对象;之后b再申请一个内存,再创建一个257对象
a = 257
b = 257
print(id(a),id(b))
67005712 67006128

#同上,-5与256一样,在小整数对象池中,变量id也是一样的
a = -5 
b = -5 
print(id(a),id(b))
1965750096 1965750096

#同上,-6与257不在小整数对象池中,变量id不一样
a = -6
b = -6
print(id(a),id(b))
67006208 67006176

在进行赋值操作时,我们会发现当给不同的变量赋值同样的数据时,代码写成一行与多行的效果是不一样的,如下:

#分别给变量a,b赋值1000,打印id可以看到两个内存地址是不一样的,写成多行,是创建了多个对象。
a = 1000
b = 1000
print(id(a),id(b))
67005872 67005712

#当将代码写成一行是,我们会发现变量a,b的内存id是一样的,说明只创建了一个对象
#当对变量进行赋值时,如果写成一行,python会自动识别需要创建几个对象,之后将变量指向相应对象的内存id,这样会减少对象的重复创建以及占用内存。
a,b = 1000,1000
print(id(a),id(b))
67006208 67006208

#同理:
a = (1,2,3)
b = (1,2,3)
print(id(a),id(b))
67960328 67988456

a,b = (1,2,3),(1,2,3)
print(id(a),id(b))
67960456 67960456
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

林沐栖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值