Python相同值列表与元组内存地址引用差异问题咨询
Python对象内存引用特性问题解答
1. 为什么a1和b1引用同一块内存地址
元组是不可变对象,一旦创建完成就无法修改内部元素的值、也无法增减元素。你这里用字面量方式定义的小元素元组触发了CPython的常量驻留优化:对于代码中出现的小体积、全由不可变元素组成的不可变字面量对象,解释器会在内存中缓存复用同一个实例,避免重复创建相同内容的对象浪费内存空间,因此两个内容完全相同的元组指向了同一块内存地址。
注意:该特性属于CPython解释器的实现级优化,并非Python语法强制要求,不是所有元组都会触发驻留(比如包含可变元素的元组、体积过大的元组就不会复用内存)。
2. 为什么a和b指向不同的内存地址
列表是可变对象,创建后支持随时修改内部元素、增减元素。如果对内容相同的列表字面量复用同一个内存实例,会出现修改a对象的同时意外改动b对象的情况,完全不符合常规开发预期。因此Python要求每次通过字面量定义列表时,都必须开辟新的内存空间创建独立的实例,哪怕两个列表的初始内容完全一致,内存地址也会不同。
内容的提问来源于stack exchange,提问作者meallhour
相关产品推荐
相关产品推荐

