Использование методов списка внутри функции print()

Почему в примере

fruits = ["яблоко", "банан", "вишня"]
print(fruits, fruits.pop())

в выводе я получаю:

['яблоко', 'банан'] вишня

Почему не так:

["яблоко", "банан", "вишня"] вишня

Ведь fruits.pop() следует после fruits.


Ответы (1 шт):

Автор решения: CrazyElf

В принципе, ответ уже дан в комментарии, но всё же дополнительно поясню. Для этого покажу небольшой фокус:

fruits = ["яблоко", "банан", "вишня"]
print(fruits.copy(), fruits.pop())

Вывод:

['яблоко', 'банан', 'вишня'] вишня

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

→ Ссылка