gpt4 book ai didi

python-3.x - 为什么python列表的id在追加操作后没有改变,如果它被实现为动态数组?

转载 作者:行者123 更新时间:2023-12-04 11:01:57 24 4
gpt4 key购买 nike

如果将列表实现为动态数组,那么每次为数组创建新空间时,分配的大小都被完全占用,为什么id没有变化?

>>> a=[]

>>> id(a)
4395087184

>>> for i in range(1000):
a.append(i)


>>> id(a)
4395087184

最佳答案

id保证对象的生命周期在对象的生命周期内是持久的。所以它会违反 id 的规范。如果此列表的 id 则起作用更改了,并且您只创建了一个列表,因此没有两个具有不同 id 的列表对象s。

这在实践中的工作方式是列表对象本身保留在相同的内存位置,但它拥有对支持数组的(私有(private))引用。当阵列的容量需要更改时,会创建一个新的后备阵列并复制内容。列表对象的(私有(private))引用已更新为指向新的后备数组,但列表对象本身并未在内存中重新定位。

我写了a longer explanation它是如何工作的,包括一个显示列表对象和支持数组的框和指针图的交互式示例。您可能会发现这有助于了解调整后备数组大小时内存中实际发生的情况。

关于python-3.x - 为什么python列表的id在追加操作后没有改变,如果它被实现为动态数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58753048/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com