Python类继承数组的内存处理:指针引用还是深拷贝?
Python中类之间数组赋值的内存机制解析
首先要明确:你给出的代码并不是类继承场景,而是ChildClass实例持有ParentClass实例的数组引用,属于对象组合的用法。
关于内存处理的核心逻辑:
- Python里所有对象都是通过引用传递的,对于列表(你说的“数组”)这类可变对象,赋值操作不会创建新的对象副本,只是让新变量指向原对象的内存地址。
- 所以你的代码里,
child_cls.childarray和parent_cls.parentarray指向的是内存中的同一个列表对象,内存里只存在一份数组数据,不存在两份拷贝。
可以通过实际代码验证这个结论:
class ParentClass(object): def __init__(self): self.parentarray = [1, 2, 3] class ChildClass(object): def __init__(self, parent): self.childarray = parent.parentarray parent_cls = ParentClass() child_cls = ChildClass(parent_cls) # 修改子类实例的数组元素 child_cls.childarray[0] = 100 # 父类实例的数组也会同步变化,说明是同一个对象 print(parent_cls.parentarray) # 输出: [100, 2, 3]
如果需要让子类拥有独立的数组副本(深拷贝,占用额外内存),可以使用copy模块的deepcopy方法:
import copy class ChildClass(object): def __init__(self, parent): # 深拷贝创建独立的数组对象 self.childarray = copy.deepcopy(parent.parentarray)
此时修改child_cls.childarray的元素,不会影响parent_cls.parentarray,因为两者是内存中完全独立的两个对象。
内容的提问来源于stack exchange,提问作者Melonman
相关产品推荐
相关产品推荐

