可变的,当 Python list
被扩展时(例如,mylist.extend()
或 mylist += anotherlist
),id列表的内容不会改变。
我知道(至少在 CPython 中)列表在内存中是连续的(并且 id 恰好是列表头部的地址)。如果列表后面的内存已经高度碎片化并且无法分配列表扩展怎么办(即使有足够的可用空间,尽管该区域不连续)?分配失败?如何缓解这种情况?
最佳答案
在 CPython 中,这是列表和元组分配方式的不同。对于列表,对象包含一个指针指向为列表内容分配的内存。列表对象本身很小,永远不需要移动;它指向的向量的地址可能会更改任意次。
对于元组对象来说,大多数情况下它应该很小,元组内容的内存确实是直接在元组对象中分配的。但是无法调整元组的大小,因此在这种情况下不会出现您的场景。
关于python - 如果列表后的连续内存不足,Python如何处理列表扩展?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36293140/