我来自javascript背景,最近在Python工作时我遇到了一些麻烦(在JS中)我会称之为对象。
我创建了一个带有init函数的类,它按预期工作:
class TestClass(object):
def __init__(self,var1,var2,...):
self.var1 = var1
self.var2 = var2
...
此时可能值得知道,这里传递的大多数变量实际上都是数组。
一切都很棒,我可以随意创建这个对象的实例,它可以按预期工作。对于背景,我这样做:
def make_object(var1,var2,...):
object = TestClass(var1,var2,...)
return object
object1 = make_object(var1, var2,...)
var1
,var2
等等都是我稍后将在原地工作的所有数组。
在脚本的后面我这样做:
object2 = object1
object3 = object1
由于存储在这些对象中的值是数组,我使用另一个变量(在脚本的另一部分中计算出来)将数组减少到我需要的元素:
object2.var1 = object2.var1[requiredIndex]
object2.var2 = object2.var2[requiredIndex]
...
我为对象中的每个数组执行此操作,它将数据完美排序 - 只有当我将object3
添加到整个等式中并在其上运行类似命令时,才发现这些行:< / p>
object3.var1 = object3.var1[requiredIndex]
object3.var2 = object3.var2[requiredindex]
...
...发现这些行正在对我已使用object2
上的相同命令进行了改进的数据进行操作,我测试过并发现它也影响object1
所以尽我所能告诉三个对象名称都只是对同一组数据的引用。
我需要object2
和object3
彼此独立(理想情况下,独立于object1
)所以我该如何解决这个问题?我希望我已经提供了足够的细节来充分解释我的问题。提前干杯!
答案 0 :(得分:2)
您可能正在寻找copy.deepcopy
object2 = copy.deepcopy(object1)
object3 = copy.deepcopy(object1)
- &GT;现在你有三个没有共享数据的独立对象。