[英]confusion in python printing the lists
在下面的python代碼中,我有一個列表,即to_do_list
和兩個列表,即other_events
和grocery_list
列表,在其中我將grocery_list
插入了grocery_list
,然后將其刪除。
我的困惑是,當我更新grocery_list
, to_do_list
會自動更新,但是當我刪除grocery_list
, to_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.