python - copy.copy 与 python 中的赋值不同吗

标签 python

我遇到过一段代码,乍一看似乎毫无意义。但我意识到这可能会产生一些我不知道的未知含义,因为 Python 不是我最熟悉的语言。

import copy
node = copy.copy(node)

阅读副本的文档是这样说的

copy.copy(x) Return a shallow copy of x.

A shallow copy constructs a new compound object and then (to the extent possible) inserts references into it to the objects found in the original.

  1. 这段代码有作用​​吗?它正在复制的节点取自场景对象列表。它是否只创建类的根级别的副本,以便它可以更改变量(名称)但不影响列表中的原始文件?节点类包含多个节点子节点。

  2. copy.copy(node)node = node 有何不同?一个构造一个新对象而另一个简单地指向同一个对象?

最佳答案

赋值运算符(=)只创建一个对象的引用,并且会创建一个引用相同内存地址的新变量。

复制会在内存中创建一个新对象,然后将变量赋值给它。

例如:

import copy

node = [0, 1]
node2 = node
node3 = copy.copy(node)

node2.append(5)

print(node)
print(node2)
print(node3)

打印出来:

[0, 1, 5]
[0, 1, 5]
[0, 1]

关于python - copy.copy 与 python 中的赋值不同吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36285916/

相关文章:

使用比较运算符的 Python 条件变量赋值

Python Django mysqldb 选择带有 unicode 值的

python - 如何将数据(id)放入表单(wtforms)并在提交时取回

python - Django:按基于类的 View 重定向已经登录的用户

python - 具有不相等元素的 pandas datetime-indexed DataFrame 之间的操作

python - 使用仅应用程序身份验证时,Twitter API 为 GET api/帮助/语言返回 HTTP 220

python - Pandas DF Pivot/Transform/Vectorize 操作

Python - 通过二进制对象进行 "windowed"迭代?

python - Tensorflow - 稀疏嵌入查找仍然稀疏

python - 从文件 : how would you make this better? 中找到 N 最大的行