概述
“list.append 如何在 Python 中工作”?这样一个简单的问题,您可能会用“为什么这很重要?”来回答这个问题。
一方面,是否关心 Python 应用程序的性能很重要。
其次,也许是一个更令人信服的原因,如果你打算面试高级 Python 开发人员的角色,它可能会让你得到这份工作。
最后,您可能还会发现了解事物在闪亮美丽的 Python 语言的引擎盖下是如何工作的很有趣和有趣!
介绍
我最近在面试 Python 开发人员的职位。
正处于最后一轮阶段,并且正在接受他们在该地区的一位技术开发人员的技术面试。
他问我的第一个问题是:
list.append
在 Python 中如何工作?
从表面上看,这是一个如此简单的问题,但大多数 Python 开发人员都难以回答。
特别是如果他们没有其他编程语言的经验。
那么它是如何list.append
工作的呢?
在引擎盖下偷看
如果您曾经学习过的唯一编程语言是 Python,那么您可能从未听说过数组。但从根本上讲,这 这就是 Python 列表的构建基础。
对于那些不熟悉的人,这里有一个简单的定义:
在计算机科学中,数组是由一组元素组成的数据结构,每个元素至少由一个数组索引或键标识。
这听起来很像 Python 列表。但这里有一个转折点:数组的大小是固定的。
这意味着一旦您创建了一个包含 10 个元素的数组,就不可能向其中添加第 11 个元素。不会array.append(new_element)
有帮助。
就像我之前告诉过你的,Python 列表是使用数组实现的。但是列表提供了一些额外的功能,让您永远不会考虑“我可以在列表中存储的最大元素数量是多少?”。
但是 Python 列表是如何实现的呢?一旦你知道了,你就会明白为什么在最坏的情况下,在我们需要存储给定数量的元素 N 的情况下,Python 应用程序可能需要最多 x3 的内存,而不是存储这 N 个元素所需的内存。
顺便说一句,这也是面试问题的答案。
执行
为什么 Python 应用程序在使用 Python 列表时可能需要 x3 倍的内存来将 N 个元素存储在数组 中?
append
这与 Python 列表如何允许您通过ing不断地向它们添加更多元素有关。
您可以将 Pythonlist
视为一个包含数组及其状态最大长度的类。它可能还将索引存储在要附加新元素的位置。
当您想要添加的元素超出当前数组允许的大小时,Python 只需创建一个新的、更大的数组并将所有现有元素复制到其中。然后将我们首先要附加的元素添加到它的末尾。
让我们形象化它。让我们从一个包含 4 个元素的列表开始:1、2、3 和 4。
正如我们所看到的,目前,我们的列表包含一个大小为 4 的数组,并且该数组的每个元素当前都已满。
那么当我们想将整数 5 添加到列表中时会发生什么?
该列表看到它要添加的索引≥数组的最大大小,因此它知道它必须创建一个更大的数组才能存储新元素。
但是新数组的最大大小是多少?
创建一个最大大小比当前数组大 1 的数组没有多大意义。这实际上意味着在每次追加操作时,我们都必须创建一个新数组。
相反,Python 创建了一个新数组,其空间量为原始数组的 x2。
然后它继续将第一个数组中的元素复制到新数组中。
最后,它销毁原始数组,更新最大大小并将我们想要附加的元素插入到新可用的插槽中。
瞧!
但是我们还没有真正解释为什么 Python 列表需要,最坏的情况下,需要 x3 内存来存储 N 个元素。
用于 N 个元素的 x3 内存
当我第一次被问到这个问题时,我被吓了一跳。为什么它需要x3内存,在最坏的情况下?难道不是 x2,因为我们的内部数组可能(几乎)是我们想要存储的元素数量的两倍?
嗯,是。但魔鬼在细节中。
下图很好地显示了 x3 内存:
当然,x2 内存来自这样一个事实,即列表将在内部存储一个数组,该数组(几乎)是它实际需要存储的元素数量的两倍。没关系。
额外的 N 内存来自这样一个事实,即当我们想要插入最后一个元素时,我们不仅需要在内存中保存 x2 数组,而且我们还需要暂时将长度为 N 的原始数组保存在内存中。
因此,原始数组 + 新加倍的数组将占用(几乎)x3 内存,而不是简单地将 N 个元素存储在数组中。
这就是这个面试问题的完美答案:)
在本文中,我们研究了 Python 如何在底层lists
工作。
具体来说,我们深入研究了当您append
向列表中添加新元素时内部发生的情况,并准确查看了 Python 在幕后的操作方式。
最后,我们解释了这种设计对内存的影响,并研究了如果你在面试 Python 开发人员角色时遇到这样的问题,你将如何回答。
你觉得这篇文章有用吗?在下面发表评论,让我知道您希望看到更多这样的内容!
最后
以上就是勤奋唇膏为你收集整理的Python 面试题:list.append 在 Python 中是如何工作的?介绍在引擎盖下偷看执行用于 N 个元素的 x3 内存的全部内容,希望文章能够帮你解决Python 面试题:list.append 在 Python 中是如何工作的?介绍在引擎盖下偷看执行用于 N 个元素的 x3 内存所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复