我不知道我是否在这里错过了一些事情,但是不明白为什么在使用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))
两个函数都返回不同的列表。我将这些列表分配给两个不同的变量,分别称为cur
和temp
。因此,cur
和temp
也是列表。
在temp.append(cur.pop())
行之后,原始state
列表更改。它将发生变化,就像我在原始列表上使用该行一样。但是我要在两个不同的列表上进行此操作。
输出:
State before append(): [[3, 2, 1], [], []]
State after append(): [[3, 2], [], [1]]
当我在另一个列表上使用append()时,为什么原始列表会更改?这些列表只是原始列表的一部分,为什么修改它们(将它们分配给新变量)会影响原始列表?