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
相关产品推荐
相关产品推荐

