Эта строка:
all_friends = friends_2017 + friends_2018 + new_friends
создает новый список, который содержит копию всего, что есть в других трех списках на данный момент времени - это не ссылка на остальные три списка, поэтому, когда вывнести изменения в исходные три списка, эти изменения не применяются к all_friends
.
. Причина, по которой all_friends
является новым списком в этом случае, заключается в том, что оператор +
создает новый список изего операндов. Если вы просто установите all_friends = new_friends
, тогда all_friends
будет просто ссылкой на существующий список new_friends
, и все, что вы сделали с одним, повлияет на другой.
Способ, которым я бы порекомендовал сохранитьall_friends
актуальным было бы сделать его функцией, которая вычисляет список по требованию, а не собственный список:
friends_2017 = ["Robert","John","Smith"]
friends_2018 = ["Andy","David","Tim"]
new_friends = []
def all_friends():
return friends_2017 + friends_2018 + new_friends
print(str(all_friends()))
Теперь каждый раз, когда вы обращаетесь к all_friends()
(обратите внимание на круглые скобки, потому что теперьэто вызов функции), он всегда будет иметь самые последние значения из этих трех списков.
Еще один вариант - перегенерировать all_friends
при каждом добавлении в другие списки:
if year == "2017":
friends_2017.append(add_friends)
elif year == "2018":
friends_2018.append(add_friends)
else:
new_friends.append(add_friends)
all_friends = friends_2017 + friends_2018 + new_friends
но это требует от вас помнить, чтобы делать это каждый раз, когда любой из этих списков изменяется. Если вы перейдете к методу использования функции, она будет просто магически работать каждый раз.