所以拿一个数组:
x = [1,2,3,4]
当你调用
时,python如何获得这个数组的长度len(x)
乍一看,一个明显的解决方案似乎是它遍历数组并递增一个计数器,然后说“嘿,数组的长度是4!” 但是如果你已经定义了一个数组,这似乎效率很低。我相信,如果我错了,请纠正我,python在初始化时必须为数组中的每个元素分配内存,这告诉我它已经在分配时遍历该区域。如果是这种情况,计算数组长度并将其分配给内存似乎是一个明智的想法,直到数组的实例被销毁。因此,当你调用len(x)时,它只是指向内存而不是遍历数组。
我想知道len()方法的行为是否与我上面描述的方式更相似,或者它是否每次调用时都会遍历数组,或者完全不同。
此外,如果它每次调用时都会遍历数组,那么可能有人在初始化时有一个很酷的技巧来存储数组的长度,而不是在调用len(x)时再次迭代它。
这主要是好奇心问题。假设答案是,每次调用len时都会迭代数组,解释为什么会出现这种情况,以及为什么调用自己的方法这样做可能是一个坏主意也是一个坏主意也将不胜感激。信息越多越好!
答案 0 :(得分:3)
Python文档是pretty clear here(我突出显示):
Python的列表实际上是可变长度数组,而不是Lisp样式的链表。该实现使用对其他对象的连续引用数组,并保留指向此数组的指针,并在列表头结构中数组的长度。
请注意Python 3的常见问题has the identical text。