Python:未赋值对象存储位置及未赋值字符串ID获取问询
Python临时对象相关问题解答
问题1:Python中未赋值的值存储在何处?
在Python里,未被赋值给变量的临时对象会存入内存,但因为没有任何引用指向它们,Python的垃圾回收机制会在合适时机将其回收,释放占用的内存空间。
你给出的字符串不可变性示例正好能验证这一点:
>>> s1='Robert' >>> id(s1) 2039784292400 >>> s1.replace('R','B') 'Bobert' >>> id(s1) 2039784292400 >>> s1 'Robert'
调用replace方法时会生成新的字符串对象'Bobert',但由于没有变量去引用这个新对象,它没有持久化的引用关联,很快就会被垃圾回收处理。
问题2:有没有办法找到持有值'Bobert'的对象的ID?
没有办法直接获取这个临时对象的ID,具体原因如下:
- 当执行
s1.replace('R','B')时,生成的'Bobert'对象没有被任何变量、容器(如列表、字典)引用,Python不会为它保留持久化的内存定位标记。 - 这条语句执行完成后,该临时对象就失去了所有引用,会被标记为可回收状态,你没有任何途径再定位到它的内存地址。
不存在所谓的「默认存储此类值的对象」——Python不会自动保存所有临时生成的对象,只有当对象被引用持有,或者属于小整数、短字符串的intern缓存池(Python内部针对常用小值的复用机制)时,才会被保留。而'Bobert'不属于intern缓存池的覆盖范围,所以生成后无引用就会被回收。
内容的提问来源于stack exchange,提问作者Monty Swanson
相关产品推荐
相关产品推荐

