我不知道我是否错过了这里的某些内容,但不明白为什么使用append()函数后下面的列表会发生变化。首先,我将一个列表(包含列表)发送到两个不同的函数。
第一个函数只是返回所有非空列表中的随机列表。第二个函数返回一个随机列表,如果当前列表(即从第一个函数返回的列表)的最后一个元素低于
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()时原始列表会发生变化?这些列表只是原始列表的一部分,为什么修改它们(同时将它们分配给新变量)会影响原始列表?
为了更好地理解 Python 数据模型的使用:
https://pypi.org/project/memory-graph/
以图表形式查看您的数据。
“state = [[3, 2, 1], [], []]”之后:
我希望能够澄清为什么原始列表发生变化。