我正在尝试为多个整数分区编写一个代码,然后将其关闭,检查我的临时变量,我的代码正在执行;但是,我遇到一个奇怪的错误,当我的临时列表(lst
)得到更新时,我的主列表(temp
)会更新。我正在将temp
写入lst
,但如果lst
更新,则不应在temp
之后更改值。
这是我的整个代码(例如n = 5
)
def partitions(n):
'''define a function which returns the number of integer partitions of n'''
flag = True
lst = []
lst.append(n)
while flag:
if isinstance(lst[len(lst)-1], list):
temp = lst[len(lst)-1]
else:
temp = [lst[len(lst)-1]]
place = len(temp) - 1
i = 2
while i > 1:
for j in reversed(temp):
if j > 1:
i = 1
temp[place] = temp[place] - 1
if place < len(temp) - 1:
temp[place+1] = temp[place+1]+1
else:
temp.append(1)
print("before changing place", lst)
place = place - 1
i = 1
if temp[0] != 1:
lst.append(temp)
else:
flag = False
print(lst)
return len(lst)
n = 5
的输出应为lst = [5, [4,1],[3,2],[3,1,1],[2,2,1],[2,1,1,1],[1,1,1,1,1]]
和len(lst) = 7
。
我从temp
→[4,1]
更新[3,2]
时发生错误。当我更新temp
时,它也会在lst
中反映出来,即使我在追加之前没有以任何方式更新lst
。这是我的打印语句的输出:
before changing place [5]
before changing place [5, [4, 1]]
before changing place [5, [3, 2]]
before changing place [5, [3, 1, 1], [3, 1, 1]]
before changing place [5, [2, 2, 1], [2, 2, 1]]
before changing place [5, [2, 2, 1], [2, 2, 1], [2, 2, 1]]
before changing place [5, [2, 1, 2], [2, 1, 2], [2, 1, 2]]
before changing place [5, [1, 2, 2], [1, 2, 2], [1, 2, 2]]
[5, [1, 2, 2], [1, 2, 2], [1, 2, 2]]`
我想我只是对附加变量时列表的行为方式感到困惑。