python是否在有i的副本时删除列表

2024-03-29 10:19:13 发布

您现在位置:Python中文网/ 问答频道 /正文

lista = [1, 2, 3, 4, 5]
listb = lista[:]
lista = 'somethingelse'
listb.pop()

所以现在,列表[1,2,3,4,5]仍然存在,或者从内存中删除,或者用listb将其更改为[1,2,3,4]?你知道吗


Tags: 内存列表poplistalistbsomethingelse
2条回答

在第一行中,创建一个由lista引用的列表。在第二行中,复制这个列表并通过listb设置一个引用。在第三行中,删除对第一行列表的引用,因此第一个列表被垃圾收集。仍然存在由listb引用的列表,该列表在最后一行中被修改。你知道吗

让我们逐行查看您的代码。你知道吗

lista = [1, 2, 3, 4, 5]

这会将名称lista指向具有值[1, 2, 3, 4, 5](我们称之为list#1)的列表。你知道吗

listb = lista[:]

这将复制上面的列表,并将名称listb指向该副本(我们称之为list#2);现在基本上有两个内容相等的列表(list#1list#2

lista = 'somethingelse'

这将导致名称lista指向字符串'somethingelse'list#1引用计数将减少1;如果不再有任何内容指向它,它的内存将被释放。你知道吗

listb.pop()

列表#2中删除最后一个元素,并返回它;列表#2将等于[1, 2, 3, 4]列表#1,如果它仍然存在,则不会被此操作更改。你知道吗

使用上面的代码,最初存储在listalist#1)中的list对象既不会更改,也不会在执行listb.pop()时存在于内存*中。你知道吗


*)尽管在Jython和其他非CPython实现中,垃圾收集可能会延迟,因此它可能仍在消耗内存。你知道吗

相关问题 更多 >