#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
.