2016-09-21 4 views
1

Я попытался очень простой код в Python интерактивной оболочкиБазовый список операции

>>> a=[1,2,3] 
>>> id(a) 
36194248L 
>>> a.append(4) 
>>> a 
[1, 2, 3, 4] 
>>> id(a) 
36194248L 
>>> 
>>> id([1,2,3]) 
36193288L 
>>> id([1,2,3].append(4)) 
506033800L 
>>> id([1,2,3].append(5)) 
506033800L 
>>> id([1,2,3].append(6)) 
506033800L 

Q: Когда я назначить список переменной с именем «а», и попытаться приложить больше значения, идентификатор() не меняется, но если я пытаюсь использовать одно и то же, не присваивая переменной, id() меняет. Поскольку списки являются изменяемыми (т. е. разрешают изменение на одном и том же адресе памяти), почему это поведение наблюдается?

ответ

4

list.append() возвращает None, а не список.

Вы получаете результат id() для этого объекта, а None - одноэлементный. Это будет всегда быть одинаковым для данного Python интерпретатора запуска:

>>> id(None) 
4514447768 
>>> [].append(1) is None 
True 
>>> id([].append(1)) 
4514447768 
1

Потому что list.append возвращает None, которому вы звоните id(None), который будет только один экземпляр.