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

Python类实例克隆:继承修改且互不影响的实现方案

解决Python实例克隆问题

你遇到的核心问题是y = x仅复制了对象引用,两个变量指向同一个实例。要实现独立的实例拷贝,正确使用copy模块的方法即可,以下是具体方案:

方法一:使用copy.copy()(浅拷贝)

对于你的Item类,属性是简单的不可变类型(int),浅拷贝完全足够。需要先导入copy模块,再调用模块的copy函数:

import copy

class Item:
    def __init__(self):
        self.value = None
    def change(self, value):
        self.value = value

x = Item()
x.change(0)
print(str(x.value))
# 使用浅拷贝创建独立实例
y = copy.copy(x)
y.change(1)
print(str(x.value) + " - " + str(y.value))

运行结果:

0
0 - 1

方法二:使用copy.deepcopy()(深拷贝)

如果你的类包含可变对象属性(比如列表、字典、其他实例),浅拷贝只会复制可变对象的引用,此时需要用深拷贝来完全复制所有层级的对象:

import copy

class Item:
    def __init__(self):
        self.value = None
        self.data = []  # 可变对象属性
    def change(self, value):
        self.value = value
    def add_data(self, num):
        self.data.append(num)

x = Item()
x.change(0)
x.add_data(5)
y = copy.deepcopy(x)
y.change(1)
y.add_data(10)
print(x.value, x.data)  # 输出:0 [5]
print(y.value, y.data)  # 输出:1 [5, 10]

为什么之前调用报错?

x.deepcopy()这种写法是错误的,因为deepcopy不是实例的内置方法,而是copy模块提供的函数,必须先导入copy模块,再以实例作为参数传入函数。

内容的提问来源于stack exchange,提问作者MirceaKitsune

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 09:24:59