簡體   English   中英

python打印列表中的混亂

[英]confusion in python printing the lists

在下面的python代碼中,我有一個列表,即to_do_list和兩個列表,即other_eventsgrocery_list列表,在其中我將grocery_list插入了grocery_list ,然后將其刪除。

我的困惑是,當我更新grocery_listto_do_list會自動更新,但是當我刪除grocery_listto_do_list卻不會更新...為什么?

grocery_list = ['banana', 'mango', 'apple']

other_events =['pick up kids','do laundry', 'dance class']

to_do_list = [other_events, grocery_list]

print(to_do_list)

grocery_list.insert(1,'onions');

print(grocery_list)

del grocery_list

print(to_do_list)

其輸出為:

[['pick up kids', 'do laundry', 'dance class'], ['banana', 'mango', 'apple']]
['banana', 'onions', 'mango', 'apple']
[['pick up kids', 'do laundry', 'dance class'], ['banana', 'onions', 'mango', 'apple']]

使用del grocery_list[:]代替ouput:

[['pick up kids', 'do laundry', 'dance class'], ['banana', 'mango', 'apple']]
['banana', 'onions', 'mango', 'apple']
[['pick up kids', 'do laundry', 'dance class'], []]

但是為什么呢?
假設我們有一個清單:
grocery_list = ['banana', 'mango', 'apple']

del grocery_list
grocery_list

當您使用它刪除列表程序時引發錯誤:

Traceback (most recent call last):
  File "<pyshell#619>", line 1, in <module>
    del grocery_list
NameError: name 'grocery_list' is not defined

在此代碼中,您使用了del grocery_list ,該刪除僅刪除了grocery_list刪除名稱會從本地或全局命名空間中刪除該名稱的綁定 ),並且不清除列表,您必須使用del grocery_list[:]來徹底刪除它詳細的del裁判這個

為什么,當你更新的原因grocery_list你的對象to_do_list更新是你的名單to_do_list包含一個唯一的參考 grocery_list

現在,為什么在刪除grocery_list to_do_list后, to_do_list不會更新,是因為鍵值del不刪除其上的對象,而只是從命名空間中刪除grocery_list

這是《 Python語言參考 》中del作用的引文:

刪除名稱會從本地或全局名稱空間中刪除該名稱的綁定

grocery_list對此有很多引用,

del grocery_list

將僅刪除一個參考,而其他參考將存在。

從列表中刪除所有引用的一種方法是使用切片分配

del grocery_list[:]

暫無
暫無

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

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