Почему изменения в list1 не отражаются в list2? - PullRequest
0 голосов
/ 14 апреля 2020

Идентификаторы li[3] и li1[0] одинаковы, но даже при изменении на 0 индекс в li1 не отражается в li. Почему?

list1=[1,2,3,4,5]
list2=list1[3:]
print(id(list1[3])==id(list2[0]))
list2[0]=7
print(list1,list2)

1 Ответ

0 голосов
/ 14 апреля 2020

Идентификатор целочисленных объектов различен и не имеет никакого отношения к списку. Если вы распечатаете идентификаторы списка, они будут другими. Вы печатаете id целого числа и оно будет таким же, как если бы python повторно использовал этот целочисленный объект за один прогон. (Я не уверен в деталях реализаций, но кажется, что python повторно использует один и тот же целочисленный объект для диапазонов от -5 до 255, пока большие числа (порядка 2 ^ 30) не вычисляются в процессе создания целочисленный объект).

Чтобы лучше понять это, вот пример, который создает два независимых списка и печатает идентификатор одного и того же целого числа и списков:

list1=[1,2,3,4,5]
list2=[4,5]
print(list1[3], id(list1[3]))
print(list2[0], id(list2[0]))
print(list1, id(list1))
print(list2, id(list2))

output:

4 4402473872
4 4402473872
[1, 2, 3, 4, 5] 4404019680
[4, 5] 4404022240
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...