Python 打印列表时的混乱



在下面的python代码中,我有一个列表,即to_do_list两个列表,即other_eventsgrocery_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_listdel grocery_list(删除名称会从本地或全局命名空间中删除该名称的绑定(,并且不会清除必须使用del grocery_list[:]来完全删除它的列表 有关del参考的更多详细信息

grocery_list有很多对它的引用和

del grocery_list

将仅删除一个引用,而其他引用将存在。

从列表中删除所有引用的一种方法是使用切片分配

del grocery_list[:]

最新更新