Python 的“就地”函数
为什么在Python中,有些函数像 [].sort
和 [].reverse
是“就地”操作的,而像 [].append
这样的函数却不是呢?
2 个回答
1
“就地算法”指的是一种排序算法,它只使用存储列表所需的内存加上一些额外的小内存。附加(Append)不是一种排序算法,因此“就地”这个词在这里没有意义,或者说它的意思并不一样。你把排序中的“就地”跟返回一个新对象的引用或修改过的同一个对象搞混了。
8
根据我手上的《Python编程》第四版:
默认情况下,pop操作就相当于取出并删除列表最后一个元素,也就是位置为-1的元素。如果你给它一个参数,pop就会删除并返回那个指定位置的元素——也就是说,list.pop(-1)和list.pop()是一样的。对于像append(添加)、insert(插入)、del(删除)和pop这样的操作,它们都是在原来的列表上直接修改,不会在内存中创建新的列表,所以执行起来很快(性能还可能取决于哪个端是“顶部”,但这又和Python当前的列表实现有关,后面我们会详细讨论这些测量概念)。
其实这里还有一整段专门讲这个内容,但这基本上就回答了你的问题。