1
BBCCBB 2019-04-29 15:14:16 +08:00
它支持随机访问,很明显是。
|
2
Sasasu 2019-04-29 15:20:10 +08:00
不,list 保存的是指针。
|
3
vencent 2019-04-29 15:23:30 +08:00
首先,保存的是对象的引用,不是对象。
其次,list 是动态数组。 |
4
sujin190 2019-04-29 15:41:14 +08:00
底层数据结构是的,只不过数组保存的是 object 指针,所以相比 c,即使保存数字这样的基础数据结构,仍然需要一次额外内存访问
可以动态增长是每次分配数组内存都是 2 的倍数,有额外空间,空间不足 resize 会申请一个新内存,然后 copy 过去,不过保存指针在数组值是大对象 resize 时性能又影响不那么大了 |
5
chitanda 2019-04-29 15:57:43 +08:00 via Android
panda 才是这样的吧
|
6
xpresslink 2019-04-29 18:51:59 +08:00
|
7
i0error 2019-04-30 01:14:15 +08:00 via iPhone
可以随时 append,我猜不是。。。
|
8
ccdrea 2019-04-30 11:26:36 +08:00
>>> a = 1
>>> id(a) 1598830848 >>> b = [a] >>> id(b) 9390640 >>> id(b[0]) 1598830848 >>> 看懂了吗 |
9
zpoint 2019-04-30 18:11:09 +08:00
是一个 c 数组, 但是数组里面的每个元素都是指向 PyObject 的指针, 达到一定阈值会触发 增大 /缩小 的操作, 实现上和 c++ 的 std::vector 类似
参考: https://github.com/zpoint/Cpython-Internals/blob/master/BasicObject/list/list.md |