Использование методов списка внутри функции print()
Почему в примере
fruits = ["яблоко", "банан", "вишня"]
print(fruits, fruits.pop())
в выводе я получаю:
['яблоко', 'банан'] вишня
Почему не так:
["яблоко", "банан", "вишня"] вишня
Ведь fruits.pop() следует после fruits.
Ответы (1 шт):
В принципе, ответ уже дан в комментарии, но всё же дополнительно поясню. Для этого покажу небольшой фокус:
fruits = ["яблоко", "банан", "вишня"]
print(fruits.copy(), fruits.pop())
Вывод:
['яблоко', 'банан', 'вишня'] вишня
Казалось бы: ну какая разница - использовать для печати список или его копию? А разница в том, что fruits - это фактически ссылка на список. Сначала Python собрал аргументы для функции - ссылку на список и собственно вынутый элемент списка, а потом он начал её выполнять. В моём варианте кода произошло копирование списка и print получил ссылку на копию (ещё целого) списка. А в вашем случае print получил ссылку на исходный список, в котором после выполнения fruits.pop() одного элемента уже не было к тому моменту, как начала выполняться сама функция print и она полезла в этот список за его элементами.