簡體   English   中英

Python:列表中相同的項目被視為相同

[英]Python: identical items in list are treated as the same

我在python中有一個嵌套列表。 每個項目的第二個列表也是一個嵌套列表。 我的目標是復制一個列表,將其插入相同的索引,然后修改每個列表。 因此,開始條件的示例:

 myList = [[first_list], [[element_1], [element_2, element_3], [duplicate_me]]]

在myList [1] [2]上進行復制/插入:

 myList = [[first_list], [[element_1], [element_2, element_3], [duplicate_me], [duplicate_me]]]

這一切都很好。 但是,當我運行附加代碼時:

 myList[1][2].append(new_element)

它將新元素追加到兩個重復項,如下所示:

 myList = [[first_list], [[element_1], [element_2, element_3], [duplicate_me, new_element], [duplicate_me, new_element]]]

元素的調用或索引方式是否有些奇怪? 我看到了一種潛在的解決方法(將項目復制到工作變量中,在此處進行修改,然后在同一點插入它),但這似乎不必要地復雜。

謝謝!

myList [1] [2]和myList [1] [3]不僅具有相同的值,它們實際上是相同的列表。 讀取它們時,您正在看的是內存中的同一區域。 因此,當您更改一個時,您也在更改另一個,因為兩者實際上是完全一樣的! 與其重復復制列表,不如做一個副本。

這是一個來自python shell的問題的示例:

>>> mylist = [1, 2, 3]
>>> newlist = mylist
>>> newlist.append(4)
>>> newlist
[1, 2, 3, 4]
>>> mylist
[1, 2, 3, 4]

解決此問題的常用方法是使用以下技巧之一:

>>> mylist = [1, 2, 3]
>>> newlist = mylist[:]  # OR :
>>> newlist = [x for x in mylist]
>>> newlist.append(4)
>>> newlist
[1, 2, 3, 4]
>>> mylist
[1, 2, 3]

第二和第三行將創建列表的副本。 如果我需要復制2D列表,則傾向於將兩者結合起來:

>>> newlist = [x[:] for x in mylist]

使用其中之一創建您的副本,一切都會好起來的。

您很可能不會復制目標列表(* [duplicate_me] *),而只是將對同一列表的重復引用附加到myList中

您需要先復制列表,然后再將其添加到myList中。 一種簡單的方法是調用傳入原始[duplicate_me]的列表構造函數

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM