首先看看我的Python代码,
s = [[1, 2], [3, 6], [9, 6]]
t = s
i = s[0]
del i
del t[0]对于2,1;t,s和"i“有三个引用,所以如果我们尝试删除它们,它不应该影响到1,2,因为1,2仍然有另外两个引用,因此Python垃圾收集系统不会删除对没有引用的1,2做。所以为什么删除"i“对1,2不起作用,而删除t对1,2有影响。
发布于 2022-08-19 08:12:49
您错误地理解了del语句的功能。对于变量名称:
del variable_namedel语句从全局变量中删除名称与对象的绑定。
用于容器和密钥的组合:
del container[key]它负责根据密钥删除容器中的元素。
用一些简单的符号来解释你在做什么。在这里,我使用一对括号来表示对象,而单词ref或变量名则表示引用。在创建这些对象之后,它将如下所示:
t s
↓ ↓
(list [ref, ref])
i ┌───┘ └───────┐
↓ ↓ ↓
(list [ref, ref]) (list [ref, ref])
┌───┘ ┌─┘ ┌──────┘┌───┘
↓ ↓ ↓ ↓
(int 1) (int 2) (int 3) (int 6)如果执行del i,最终结果如下:
t s
↓ ↓
(list [ref, ref])
┌───┘ └───────┐
↓ ↓
(list [ref, ref]) (list [ref, ref])
┌───┘ ┌─┘ ┌──────┘┌───┘
↓ ↓ ↓ ↓
(int 1) (int 2) (int 3) (int 6)如果执行del t[0],最终结果如下:
t s
↓ ↓
(list [ref])
i └────────────┐
↓ ↓
(list [ref, ref]) (list [ref, ref])
┌───┘ ┌─┘ ┌──────┘┌───┘
↓ ↓ ↓ ↓
(int 1) (int 2) (int 3) (int 6)https://stackoverflow.com/questions/73413164
复制相似问题