我正在使用以下输出运行此代码,但我不希望.remove()影响类实例。
@Pattern(regexp = "word1|word2|word3")
String name;
输出
class dumby:
def __init__(self):
a = []
test1 = dumby()
A = [1,1]
test1.a = A
print(test1.a)
A.remove(A[0])
print(test1.a)
我想要的输出是
[1, 1]
[1]
请帮助!
答案 0 :(得分:1)
Python变量(或成员属性)实际上持有对象的引用。有些对象是不可变的(数字,字符串),但是大多数(特别是列表)是不可变的。因此,当您修改可变对象时,无论使用什么引用来更改它,对它的所有引用都会受到影响。
这正是这里发生的事情:
test1 = dumby() # ok, you create a new dumby
A = [1,1] # ok you create a new list referenced by A
test1.a = A # test1.a now references the same list
print(test1.a)
A.remove(A[0]) # the list is modified
print(test1.a) # you can control that the list is modified through the other ref.
您要做的是分配原始列表的副本:
test1.a = A[:] # test1.a receives a copy of A (an independent object)