首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
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

回答 3

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

Stack Overflow用户

发布于 2022-08-19 07:25:18

将注释转换为答复。

设置等于花药列表的变量不复制列表,它只在内存中设置引用。编辑引用时,编辑原始列表。使用复制模块实际复制列表。

示例:

代码语言:javascript
复制
import copy

s = [[1, 2], [3, 6], [9, 6]]
t = copy.copy(s)
del t[0]

print(s)
print(t)

结果:

代码语言:javascript
复制
[[1, 2], [3, 6], [9, 6]]
[[3, 6], [9, 6]]

Note

copy.copy()是一个浅拷贝,它构造一个新的复合对象,然后(尽可能)将对原始对象的引用插入其中。

copy.deepcopy()是一个深拷贝,它构造一个新的复合对象,然后递归地将原始对象中的副本插入其中。

票数 0
EN

Stack Overflow用户

发布于 2022-08-19 07:34:27

i = s[0]将i设为1,2。所以,当使用del i时,我们有i= 1,2,这不影响原始列表。它仅影响变量i,如果要删除列表s中的第一项,只需执行以下操作:

代码语言:javascript
复制
del s[0]

但是,请注意,在这种情况下使用remove()更好,因为remove()的时间复杂度是O(n),其中n是元素的数量,del的时间复杂度是O(n-1),其中是要删除的元素的索引。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73413164

复制
相关文章

相似问题

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