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