python - 如果列表后的连续内存不足,Python如何处理列表扩展?

标签 python list append extend

可变的,当 Python list 被扩展时(例如,mylist.extend()mylist += anotherlist),id列表的内容不会改变。

我知道(至少在 CPython 中)列表在内存中是连续的(并且 id 恰好是列表头部的地址)。如果列表后面的内存已经高度碎片化并且无法分配列表扩展怎么办(即使有足够的可用空间,尽管该区域不连续)?分配失败?如何缓解这种情况?

最佳答案

在 CPython 中,这是列表和元组分配方式的不同。对于列表,对象包含一个指针指向为列表内容分配的内存。列表对象本身很小,永远不需要移动;它指向的向量的地址可能会更改任意次。

对于元组对象来说,大多数情况下它应该很小,元组内容的内存确实是直接在元组对象中分配的。但是无法调整元组的大小,因此在这种情况下不会出现您的场景。

关于python - 如果列表后的连续内存不足,Python如何处理列表扩展?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36293140/

相关文章:

javascript - 向表单添加字段 (jQuery)

php - 如何连接PHP变量名?

python - 'AdminSite' 对象没有属性 'root'

python - Pandas 多索引 : Divide all columns by one column

java - 从 Java 转换为 Python

Python 在 for 循环中减少一个大列表以提高速度

python - 在 Python 中解包复杂的嵌套 C 结构

python - linux守护进程无法运行python文件

c# - 如何从两个值创建一个列表?

javascript - 如何用 Javascript 替换和追加