![]() | 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 +0800 底层数据结构是的,只不过数组保存的是 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 |