首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python del和垃圾收集

Python del和垃圾收集
EN

Stack Overflow用户
提问于 2022-08-19 07:20:37
回答 3查看 246关注 0票数 -3

首先看看我的Python代码,

代码语言:javascript
复制
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有影响。

EN

Stack Overflow用户

回答已采纳

发布于 2022-08-19 08:12:49

您错误地理解了del语句的功能。对于变量名称:

代码语言:javascript
复制
del variable_name

del语句从全局变量中删除名称与对象的绑定。

用于容器和密钥的组合:

代码语言:javascript
复制
del container[key]

它负责根据密钥删除容器中的元素。

用一些简单的符号来解释你在做什么。在这里,我使用一对括号来表示对象,而单词ref或变量名则表示引用。在创建这些对象之后,它将如下所示:

代码语言:javascript
复制
 t s
 ↓ ↓
(list [ref, ref])
 i ┌───┘    └───────┐
 ↓ ↓                ↓
(list [ref, ref]) (list [ref, ref])
   ┌───┘  ┌─┘     ┌──────┘┌───┘
   ↓      ↓       ↓       ↓
(int 1) (int 2) (int 3) (int 6)

如果执行del i,最终结果如下:

代码语言:javascript
复制
 t s
 ↓ ↓
(list [ref, ref])
   ┌───┘    └───────┐
   ↓                ↓
(list [ref, ref]) (list [ref, ref])
   ┌───┘  ┌─┘     ┌──────┘┌───┘
   ↓      ↓       ↓       ↓
(int 1) (int 2) (int 3) (int 6)

如果执行del t[0],最终结果如下:

代码语言:javascript
复制
 t s
 ↓ ↓
(list [ref])
 i     └────────────┐
 ↓                  ↓
(list [ref, ref]) (list [ref, ref])
   ┌───┘  ┌─┘     ┌──────┘┌───┘
   ↓      ↓       ↓       ↓
(int 1) (int 2) (int 3) (int 6)
票数 1
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73413164

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档