我对Python比较陌生并且喜欢它。如果遇到问题,通常我会设法找到自己的解决方案或相关主题,以帮助我了解自己的问题。但是我似乎无法绕过它。
所以我现在面临的问题是我将class1.list赋予另一个class2.function,在那里我对该列表进行一些处理。我的问题是我的class1.list在该函数中发生了更改,但我不明白为什么:
class ClassA():
def function_a(self, test):
test[0][0] = '?'
test[0][1] = '?'
return test
class ClassB():
class_b_list = [[1,2],[3,4]]
def function_b(self,value):
value[1][0] = 350
value[1][1] = 250
return value
my_class_a = ClassA()
my_class_b = ClassB()
print(my_class_b.class_b_list)
my_class_a.function_a(my_class_b.class_b_list)
my_class_b.function_b(my_class_b.class_b_list)
print(my_class_b.class_b_list)
所以我的第一张印刷品会给我列表的实际值:[[1,2] [3,4]]
但是在将其作为属性提供后,我的列表更改为:[['?','?'] [350,250]]
我想念什么?我不希望my_class_b.class_b_list更改。
答案 0 :(得分:2)
请勿尝试更改参数。首先复制它,然后更改并返回。
from copy import deepcopy
class ClassA():
def function_a(self, test):
# use deep copy if you're using nested lists, or mutating object/dict in list
test = deepcopy(test)
# if not, slice copy is usually enough
# test = test[:]
test[0][0] = '?'
test[0][1] = '?'
return test