2024-03-29 10:19:13 发布
网友
lista = [1, 2, 3, 4, 5] listb = lista[:] lista = 'somethingelse' listb.pop()
所以现在,列表[1,2,3,4,5]仍然存在,或者从内存中删除,或者用listb将其更改为[1,2,3,4]?你知道吗
在第一行中,创建一个由lista引用的列表。在第二行中,复制这个列表并通过listb设置一个引用。在第三行中,删除对第一行列表的引用,因此第一个列表被垃圾收集。仍然存在由listb引用的列表,该列表在最后一行中被修改。你知道吗
lista
listb
让我们逐行查看您的代码。你知道吗
lista = [1, 2, 3, 4, 5]
这会将名称lista指向具有值[1, 2, 3, 4, 5](我们称之为list#1)的列表。你知道吗
[1, 2, 3, 4, 5]
listb = lista[:]
这将复制上面的列表,并将名称listb指向该副本(我们称之为list#2);现在基本上有两个内容相等的列表(list#1和list#2)
lista = 'somethingelse'
这将导致名称lista指向字符串'somethingelse';list#1的引用计数将减少1;如果不再有任何内容指向它,它的内存将被释放。你知道吗
'somethingelse'
listb.pop()
从列表#2中删除最后一个元素,并返回它;列表#2将等于[1, 2, 3, 4]。列表#1,如果它仍然存在,则不会被此操作更改。你知道吗
[1, 2, 3, 4]
使用上面的代码,最初存储在lista(list#1)中的list对象既不会更改,也不会在执行listb.pop()时存在于内存*中。你知道吗
*)尽管在Jython和其他非CPython实现中,垃圾收集可能会延迟,因此它可能仍在消耗内存。你知道吗
在第一行中,创建一个由
lista
引用的列表。在第二行中,复制这个列表并通过listb
设置一个引用。在第三行中,删除对第一行列表的引用,因此第一个列表被垃圾收集。仍然存在由listb
引用的列表,该列表在最后一行中被修改。你知道吗让我们逐行查看您的代码。你知道吗
这会将名称
lista
指向具有值[1, 2, 3, 4, 5]
(我们称之为list#1)的列表。你知道吗这将复制上面的列表,并将名称
listb
指向该副本(我们称之为list#2);现在基本上有两个内容相等的列表(list#1和list#2)这将导致名称
lista
指向字符串'somethingelse'
;list#1的引用计数将减少1;如果不再有任何内容指向它,它的内存将被释放。你知道吗从列表#2中删除最后一个元素,并返回它;列表#2将等于
[1, 2, 3, 4]
。列表#1,如果它仍然存在,则不会被此操作更改。你知道吗使用上面的代码,最初存储在
lista
(list#1)中的list对象既不会更改,也不会在执行listb.pop()
时存在于内存*中。你知道吗*)尽管在Jython和其他非CPython实现中,垃圾收集可能会延迟,因此它可能仍在消耗内存。你知道吗
相关问题 更多 >
编程相关推荐