Python中变量重赋值后首次赋值的数值会被如何处理?
Python变量重赋值后原有值的去向问题解答
Python中的变量本质上是指向内存对象的引用,并非存储值的容器,你提到的场景可以按执行顺序拆解:
- 执行
a=10时:Python会先在内存中创建一个存储整数10的int类型对象,再将变量名a指向该对象的内存地址 - 执行
a=15时:Python会新创建存储整数15的int类型对象,然后将a的指向修改为新对象的地址,此时存储10的对象就没有任何变量引用了
关于是否会被垃圾回收,需要分两种情况:
通用规则下,没有任何引用指向的对象会被Python的垃圾回收机制标记为可回收,后续会在合适的时机被清理,释放占用的内存。
但你的案例中存在特殊情况:Python默认对[-5, 256]区间的小整数做了驻留优化,这个区间的整数对象会被预先创建、全局保留,哪怕没有变量引用也不会被垃圾回收,目的是减少频繁创建销毁小整数的性能开销。10正好属于驻留区间,所以实际不会被回收;如果是超出该区间的大整数/其他类型的对象,无引用后会被正常回收。
你使用的测试代码逻辑如下:
a = 10 a = 15 print(a)
运行输出结果:15
内容的提问来源于stack exchange,提问作者codeholic24
相关产品推荐
相关产品推荐

