Что именно происходит, когда функции назначаются списку в Python?

#python

Вопрос:

Я изучаю основы Python и пытаюсь понять фреймы Python.

Я могу нарисовать диаграммы среды для некоторого базового потока, но я путаюсь со списками.

Ниже приведен кодовый блок.

 def square(x):
    return x*x
foo = square
x = [square, foo]

print(x) # [<function square at 0x1234..>, <function square at 0x1234...>]

foo = 5

print(x) # [<function square at 0x1234..>, <function square at 0x1234...>]
 

Я думаю, что в последней строке должно быть напечатано » [<функциональный квадрат в 0x1234..>, 5]», потому что foo был изменен.

Насколько я думаю, при назначении foo списку новый указатель функции(Я даже не уверен, что это правильное слово для Python) создается и присваивается то же значение, которое foo имеет. И этот новый указатель функции присваивается списку.

Я прав?

Если это так, то, по-видимому, единственный способ изменить содержимое элемента списка-это получить доступ с помощью x[0] синтаксиса и изменить его. Это тоже правильно?

Комментарии:

1. foo = 5 переназначает идентификатор foo , который не изменяет значение (названную функцию square ), на которое он ранее ссылался, и не изменяет то, на что x[1] ссылается. Прочитайте, например nedbatchelder.com/text/names1.html . x , как следует из вывода, содержит ссылку непосредственно на объект функции, а не на имя foo .

Ответ №1:

Строка foo = 5 обновила значение , присвоенное переменной foo , но массив x по-прежнему содержит ссылку на исходный function объект, который не обновляется при изменении foo .