在下面的python代码中,我有一个列表,即to_do_list
两个列表,即other_events
和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']]
当您更新对象to_do_list
更新grocery_list
时,原因是您的列表to_do_list
包含对grocery_list
的唯一引用。
现在,为什么删除grocery_list
后没有更新to_do_list
是因为 keyworkdel
不会删除其对象,而只会从命名空间中删除grocery_list
。
以下是 Python 语言参考中关于del
所做的事情的引述:
删除名称会从本地或 全局命名空间
改用del grocery_list[:]
输出 :
[['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
在此代码中,你使用了仅删除grocery_list
del grocery_list
(删除名称会从本地或全局命名空间中删除该名称的绑定(,并且不会清除必须使用del grocery_list[:]
来完全删除它的列表 有关del
参考的更多详细信息
grocery_list有很多对它的引用和
del grocery_list
将仅删除一个引用,而其他引用将存在。
从列表中删除所有引用的一种方法是使用切片分配
del grocery_list[:]