为什么在另一个列表上使用append()后这个列表会改变

问题描述 投票:0回答:1

我不知道我是否错过了这里的某些内容,但不明白为什么使用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 arrays python-3.x list nested-lists
1个回答
0
投票

为了更好地理解 Python 数据模型的使用:

https://pypi.org/project/memory-graph/

以图表形式查看您的数据。

“state = [[3, 2, 1], [], []]”之后:

“cur = fooOne(state)”之后:

“temp = fooTwo(state,cur)”之后:

“temp.append(cur.pop())”之后:

我希望能够澄清为什么原始列表发生变化。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.