Это потому, что оба list
и list2
относятся к тому же списку после выполнения задания list2=list
.
Попробуйте это, чтобы увидеть, относятся ли они к тем же объектам или другим:
id(list)
id(list2)
Пример:
>>> list = [1, 2, 3, 4, 5]
>>> list2 = list
>>> id(list)
140496700844944
>>> id(list2)
140496700844944
>>> list.remove(3)
>>> list
[1, 2, 4, 5]
>>> list2
[1, 2, 4, 5]
Если вы действительно хотите создать дублируемую копию list
, чтобы list2
не ссылался на исходный список, но копия списка, используйте оператор среза:
list2 = list[:]
Пример:
>>> list
[1, 2, 4, 5]
>>> list2
[1, 2, 4, 5]
>>> list = [1, 2, 3, 4, 5]
>>> list2 = list[:]
>>> id(list)
140496701034792
>>> id(list2)
140496701034864
>>> list.remove(3)
>>> list
[1, 2, 4, 5]
>>> list2
[1, 2, 3, 4, 5]
Кроме того, не используйте list
как имя переменной, потому что изначально , list
относится к списку типов, но, определяя вашу собственную переменную list
, вы скрываете исходный list
, который относится к списку типов. Пример:
>>> list
<type 'list'>
>>> type(list)
<type 'type'>
>>> list = [1, 2, 3, 4, 5]
>>> list
[1, 2, 3, 4, 5]
>>> type(list)
<type 'list'>
Вам не хватает «корневой» конфигурации / опций (я не знаю, так как я не использую Hanami).
Глядя на трассировку стека:
fetch
имеет псевдоним :[]
(все ссылки на последние, потому что я ленивый :))