You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 14:22:28