2016-09-13 6 views
-2

Создаю список с тремя элементами с именем l после этого, я скопирую все содержимое списка в список y. Но когда я печатаю адрес из них в памяти, я не понимаю, почему это не тот же адрес. Почему y не является ссылкой для l, и если я хочу, чтобы y был ссылкой l, так что они будут иметь тот же адрес. Как я могу это сделать ?Распределение памяти в python

Это мой код

l = [8,12,3] 
y = l[:] 

print l 
print y 

print id(l) 
print id(y) 

Показать на Полноэкранный:

[8, 12, 3] 
[8, 12, 3] 
40894592 
40837072 
+3

Если вам нужны две ссылки на один и тот же список, почему вы * явно * создали копию? – jonrsharpe

ответ

2

[:] копирует содержание l в новый список y, поэтому им необходимо иметь разные адреса. Для того, чтобы y эталона l, просто написать

y = l 
0

Поскольку срез списка создает новый список. id возвращает адрес каждого списка.

0

Хорошая точка в том, что если вы пишете это заявление,

l = [8,12,3], 

Python создает указатель от объекта l к списку [8, 12, 3].

В случае, если сделать это заявление

y = l, 

Затем объект y указывает на l и если вы измените l, y также будет изменен.

В случае, если вы пишете

y = list(l), 

объекту y указывает на новый список. Затем, если вы измените l, значения в y остаются без изменений.