问题描述
我正在编写一个程序,需要将数据属性从类的一个实例复制到另一个实例。起初,这是使用 deepcopy() 实现的,在函数的本地范围内创建一个重复的实例,然后在函数终止时将其丢弃。问题是,这用于程序的一个重要方面,该方面将重复多次。恐怕 deepcopy() 会严重拖慢程序。
instance2.dataattribute = instance1.dataattribute
我相信这会产生别名问题,其中对 instance1 的更改也会对 instance2 进行更改。
解决方法
您有三种选择:赋值、浅拷贝和深拷贝。当属性不可变时,赋值很好。浅拷贝 (copy.copy
) 仅适用于具有不可变字段的可变属性(例如,整数列表)。深拷贝 (copy.deepcopy
) 适用于包含可变字段的可变属性(例如,列表列表)。这是有关该主题的 very helpful article。
我相信这会产生一个别名问题,其中对 instance1 的更改 也被制作成instance2
你真的尝试过吗?
>>> class Foo:
... def __init__(self,a):
... self.a = a
>>> foo = Foo(2)
>>> bar = Foo(3)
>>> bar.a = foo.a
>>> bar.a
2
>>> foo.a = 15
>>> bar.a
2
唯一会产生问题的是参数可变时:
>>> foo = Foo([1,2])
>>> bar = Foo([2,3])
>>> bar.a = foo.a
>>> foo.a.append(6)
>>> bar.a
[1,2,6]