Найти - Пользователи
Полная версия: Что делает конструкция x=[[]]*3 ?
Начало » Python для новичков » Что делает конструкция x=[[]]*3 ?
1
Broglie
Для интереса залез в вакансии Яндекса и наткнулся на такой пример:
x = [[]]*3
x[0].append('a')
x[1].append('b')
x[2].append('c')
x[0]=['d']
print x
Я ожидал такого:
[['d'],['b'],['c']]
Но результат оказался иным:
[['d'], ['a', 'b', 'c'], ['a', 'b', 'c']]
Почему так?
P.S. В Яндекс не собираюсь, просто для себя интересно.
doza_and
Broglie
Почему так?
>>> [id(i) for i in [[]]*3]
[20549760, 20549760, 20549760]
py.user.next
Broglie
Почему так?
В списке хранятся не сами объекты, а их адреса. Когда обращаешься к объекту в списке, происходит переход к этому объекту по его адресу . Это со всеми объектами происходит.

>>> lst = [1] * 3
>>> lst
[1, 1, 1]
>>> id(lst[0])
1287271584
>>> id(lst[1])
1287271584
>>> id(lst[2])
1287271584
>>>
A.N.Onim
Вот так вот:
x = [[] for x in range(3)]
x[0].append('a')
x[1].append('b')
x[2].append('c')
x[0]=['d']
print x
input()
видает:


Вот так вот можно сделать так как вы ожидали.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB