在另一个列表上使用append()后,为什么此列表会更改

时间:2020-02-12 17:24:39

标签: python arrays python-3.x list nested-lists

我不知道我是否在这里错过了一些事情,但是不明白为什么在使用append()函数后下面的列表会发生变化。首先,我将一个列表(包含列表)发送给2个不同的函数。

第一个函数只是返回所有非空列表中的随机列表。如果当前列表(从第一个函数返回的列表)的最后一个元素低于state中的另一个列表,或者该列表为空,则第二个函数返回一个随机列表。

import random
def fooOne(state):
    lst = [x for x in state if len(x) > 0]
    return random.choice(lst)

def fooTwo(state,current):
    lst2 = [x for x in state if len(x) == 0 or x[-1] > current[-1]]
    return random.choice(lst2)

state = [[3, 2, 1],
         [],
         []]

cur = fooOne(state)
temp = fooTwo(state,cur)

print("State before append(): {}".format(state))
temp.append(cur.pop())
print("State after append(): {}".format(state))

两个函数都返回不同的列表。我将这些列表分配给两个不同的变量,分别称为curtemp。因此,curtemp也是列表。

temp.append(cur.pop())行之后,原始state列表更改。它将发生变化,就像我在原始列表上使用该行一样。但是我要在两个不同的列表上进行此操作。

输出:

State before append(): [[3, 2, 1], [], []]
State after append(): [[3, 2], [], [1]]

当我在另一个列表上使用append()时,为什么原始列表会更改?这些列表只是原始列表的一部分,为什么修改它们(将它们分配给新变量)会影响原始列表?

0 个答案:

没有答案