2017-02-20 14 views

ответ

2
parinfo = [{'limited':[0,0], 'limits':[0.,0.]}] * 3 

Над линией, вместо того чтобы сделать 3 различных словарных объектов, он создает один; все элементы в списке ссылаются на один и тот же словарь.

Вы должны сделать так, чтобы создать 3 разделенных словарей:

parinfo = [{'limited':[0,0], 'limits':[0.,0.]} for i in range(3)] 
+0

@StevenRumbalski, Спасибо за комментарий. Я обновил соответствующим образом. – falsetru

-1
parinfo = [{'limited':[0,0], 'limits':[0.,0.]}] * 3 

Этот код создает неполную копию вместо глубокой копии.

+0

Нет даже неглубокой копии. Всего 3 ссылки на один и тот же словарь. См. [Link] (https://docs.python.org/2/library/copy.html) для объяснения мелкой копии (и глубоких копий). – Elmex80s

2

Ваш вопрос можно разбить на несколько частей.

Во-первых, вы умножаете список, который использует метод __mul __().

s .__ mul __ (n) -> Результаты s * n - повторное конкатенация.

>>> a = [1,2,3] 
>>> a * 3 
[1, 2, 3, 1, 2, 3, 1, 2, 3] 

Кроме того, пытаясь инициализировать список списков приведет к списку ссылающегося три внутренний список, который, вероятно, не то, что вы хотите.

>>> a = [[]] 
>>> a * 3 
[[], [], []] 

Во-вторых, вы создали пару ключ-значение, где значение является списком.

«ограниченный» является ключом к списку с тремя элементами [1,2,3]

>>> dicty = {'limited': [1, 2, 3]} 
>>> dicty['limited'] 
[1, 2, 3] 

В-третьих, вы, по сути обновляемых 0-й элемент в списке.

>>> dicty['l'][0] = 100 
>>> dicty 
{'l': [100, 2, 3]} 

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

  • Нет связанных вопросов^_^