为什么主列表在变量更改时更新值?

时间:2017-04-08 21:36:38

标签: python list

我正在尝试为多个整数分区编写一个代码,然后将其关闭,检查我的临时变量,我的代码正在执行;但是,我遇到一个奇怪的错误,当我的临时列表(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]]`

我想我只是对附加变量时列表的行为方式感到困惑。

0 个答案:

没有答案