Непонятно, что вам нужно, поэтому, пожалуйста, отредактируйте исходный вопрос, чтобы сообщить нам, какой вывод вам нужен. Но некоторые предложения ...
Первый вопрос;у вас нет двух списков. У вас есть a
и b
, каждый из которых представляет собой вложенный список вложенных списков (глубиной 3 уровня), что в общей сложности включает 14 списков.
a = [ # First level list "a"
[ # Second level list I.e. a[0]
[] # Third level list a[0][0]
],
[ # Second list I.e. a[1]
[0.4, 2] # Third level list a[1][0] = 0.4, a[1][1] = 2
],
[ # Second level list I.e. a[2]
[0.8, 1] # Third level list a[2][0] = 0.8, a[2][1] = 1
]
]
Так что вам нужно решить, где вы хотите, чтобы все было наоборот.
Второй вопрос - идея reference
против copy
в Python. Хорошее обсуждение начинается здесь . Но, проще говоря, имя переменной - это ссылка на объект, а не сам объект.
Итак, когда вы создаете a
с ...
a = [[[]], [[0.4, 2]], [[0.8, 1]]]
... вы создаете объект списка в памяти со ссылкой на переменную a
. Этот объект списка содержит ссылки на три других объекта списка, которые были созданы в памяти (a[0]
, a[1]
, a[3]
), каждый из которых содержит ссылку на один дополнительный объект списка (a[0][0]
, a[1][0]
, a[2][0]
).
Если вы назначите a
на A
с помощью ...
a = [[[]], [[0.4, 2]], [[0.8, 1]]]
print ("the memory location for object 'a' is:", hex(id(a)))
A = a
print ("the memory location for object 'A' is:", hex(id(A)), "(The same location)")
b = [i for i in reversed(a)]
print ("the memory location for object 'b' is:", hex(id(b)), "(A different location)")
... a
и A
- это один и тот же объект, но b
это новый объект. Так что print(a is b)
возвращает False
.
Т.е. ...
the memory location for object 'a' is: 0x7fdc65b12308
the memory location for object 'A' is: 0x7fdc65b12308 (The same location)
the memory location for object 'b' is: 0x7fdc65b126c8 (A different location)
ОДНАКО, как указано @Derte Trdelnik
выше, когда вы создали b, вы скопировали только ссылку для подсписков, а НЕ объект. Т.е.
a = [[[]], [[0.4, 2]], [[0.8, 1]]]
b = [i for i in reversed(a)]
print ("the memory location for object 'a' is:", hex(id(a)))
print ("the memory location for object 'b' is:", hex(id(b)), "(A different location)")
print ("the memory location for sub-list object 'a[1]' is:", hex(id(a[1])) )
print ("the memory location for sub-list object 'b[1]' is:", hex(id(b[1])), "(The same location as a[1])" )
ВЫХОД:
the memory location for object 'a' is: 0x7f49b46f59c8
the memory location for object 'b' is: 0x7f49b46f5a08 (A different location)
the memory location for sub-list object 'a[1]' is: 0x7f49b46f5908
the memory location for sub-list object 'b[1]' is: 0x7f49b46f5908 (The same location as a[1])