2016-07-06 3 views
-2

Когда я выполнил следующий код, я получил значение A. Когда я выполнил его снова, я получил значение B. Почему это. Разве это не привело к такому же результату?Расположение объектов - Python

код

list_a = ['one_A', 'two_A', 'three_A'] 

#initialize the list 
new_li = map(lambda i: '{0}\n'.format(i), list_a) 

print(new_li) 

Возвращаемое значение:

<map object at 0x00000000093E7E80> 

Значение Б

<map object at 0x0000000009423080> 

Примечание

Я не спрашиваю, как превратить объект карты в список. Но, скорее, места памяти различаются, когда объект map new_li воссоздается.

+6

Почему они были бы то же самое? – melpomene

ответ

2

В python, когда вы назначаете переменную значению, она сохраняет значение в ячейке памяти, а затем создает ссылку на этот объект. В результате ваша переменная является просто ссылкой. Таким образом, если вы назначаете новое значение переменной, она не перезаписывает эту ячейку памяти с новым значением, а скорее создает новый объект в новой ячейке памяти и новую ссылку на эту ячейку памяти.

См. Ниже пример. В этом случае список [1,2] сохраняется в ячейке памяти 46777352, когда он создан. Когда b создается, он сохраняется в ячейке памяти 46797512. Хотя они имеют одинаковое значение, a не является b, потому что они не относятся к одному и тому же месту памяти. Когда a повторно назначается значение [1,2,3], оно не изменяет значение в ячейке памяти 46777352, а скорее создает новый объект в ячейке памяти 46812296. Переменная b сохраняет исходную ячейку памяти, даже если она была созданный после переменной a.

Пример

Example

Дополнительная литература

Вот несколько хороших видео с PyCon 2015 и 2016 годах, объясняющие концепцию.

Факты и мифы о Python - PyCon 2015

https://www.youtube.com/watch?v=_AEJHKGk9ns&feature=youtu.be

Python по Immersion - PyCon 2016

https://www.youtube.com/watch?v=9k5687mmnoc

Смежные вопросы