当作为函数属性给定时,类中的列表发生更改

时间:2019-07-20 10:46:34

标签: python python-3.x

我对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更改。

1 个答案:

答案 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

另请参阅:How to clone or copy a list?