【发布时间】:2020-09-26 11:14:15
【问题描述】:
在我的 Python 课程中,我读到了这些句子:
"赋值:list2 = list1 复制数组的名称,而不是其内容。实际上,这两个名称 (list1 and list2) 标识计算机内存中的相同位置。修改其中一个会影响其他,反之亦然。"
Cisco Networking Academy 上提供的资源 - 课程名称:PCAP - Programming Essentials in Python - 模块 3,第 3.1.6.1 章,标题为“列表的内在生命”。完全在下面您会遇到第 3.1.6.1 章的完整文本。
在第 3.1.6.1 章中,作者解释了列表是什么以及它的功能。我上面提到的段落提出了我如何才能最好地可视化“数组”的问题。我可以将“数组”视为仅指向列表的链接吗? “数组”本身是一个空实体吗?
第 3.1.6.1 章全文:
列表的内在生命
现在我们想向您展示列表的一个重要且非常令人惊讶的特性,该特性将它们与普通变量区分开来。
我们希望您记住它 - 它可能会影响您未来的程序,如果忘记或忽视它可能会导致严重的问题。
看看编辑器中的sn-p。
list1 = [1]
list2 = list1
list1[0] = 2
print(list2)
程序:
——创建一个名为list1的单元素列表;
– 将其分配给名为list2 的新列表;
– 更改list1 的唯一元素;
– 打印出list2。
令人惊讶的部分是程序将输出:[2],而不是 [1],这似乎是显而易见的解决方案。
列表(以及许多其他复杂的 Python 实体)以不同于普通(标量)变量的方式存储。
你可以这样说:
——普通变量的名称就是其内容的名称; – 列表的名称是存储列表的内存位置的名称。 再读一遍这两行 - 区别对于理解我们接下来要讨论的内容至关重要。
赋值:list2 = list1 复制数组的名称,而不是其内容。实际上,这两个名称 (list1 and list2) 标识计算机内存中的相同位置。修改其中一个会影响另一个,反之亦然。
【问题讨论】:
-
抱歉你的问题不清楚:一个数组(实际上是一个列表)是一个容器。它可以包含任何东西。将数组与 URL 的函数进行比较是什么意思?
-
这是一个很奇怪的描述。 Python 没有数组(在一个不起眼的模块和第三方扩展之外)。名字永远不会被复制,他们不是头等舱。内存布局是一个实现细节。等等……
-
感谢您的回复。我认为数组和列表是两个不同的东西。当我阅读 Python 课程的文本时,看起来 list2 本身是空的。 List2 仅指 list1。这就是为什么我认为数组是某种链接或地址...
-
您的问题需要独立。如果我们没有这本书,告诉我们代码在书的哪一章对我们没有好处。您需要包含代码in your question。
标签: python arrays python-3.x