Почему этот список меняется после использования append () в другом списке - PullRequest
0 голосов
/ 12 февраля 2020

Я не знаю, пропустил ли я что-то здесь, но не понимаю, почему меняется список ниже после использования функции 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 () в другом списке? Эти списки являются лишь некоторыми частями исходного списка, почему их изменение (при назначении их новым переменным) влияет на исходный список?

...