全局变量被局部变量修改?
Global variable gets modified by local variable?
我在 python 3.7.9.
-我需要将列表中的一些项目复制到另一个列表中。
-然后我需要对我的新列表进行计算而不改变原始列表。
但是无论我做什么,我的原始列表都会进行与新列表相同的修改。
有人能解释一下为什么吗?
感谢您的回复
调试模式:
这种现象在python中被称为浅拷贝。
基本上,
reduite=mat[1:]
正在引用 mat 的内部对象(又是数组),因此修改副本数组反映在原始数组上。
使用deepcopy解决这个问题。
在您的代码中,您将进行分配:
reduite = mat[1:]
这仅 绑定 reduite
到 mat
的元素。
换句话说,变量现在引用内存中的相同对象,这就是为什么更改一个对象会更改另一个对象(另请参阅 Assignment statements 上的参考)。
由于 mat[1:]
是列表的列表,您最好的选择可能是在赋值时使用 copy.deepcopy()
(另请参阅 documentation of copy
)。
This post 还包含对各种复制方法的一些很好的解释。
我在 python 3.7.9.
-我需要将列表中的一些项目复制到另一个列表中。
-然后我需要对我的新列表进行计算而不改变原始列表。
但是无论我做什么,我的原始列表都会进行与新列表相同的修改。
有人能解释一下为什么吗?
感谢您的回复
调试模式:
这种现象在python中被称为浅拷贝。
基本上,
reduite=mat[1:]
正在引用 mat 的内部对象(又是数组),因此修改副本数组反映在原始数组上。
使用deepcopy解决这个问题。
在您的代码中,您将进行分配:
reduite = mat[1:]
这仅 绑定 reduite
到 mat
的元素。
换句话说,变量现在引用内存中的相同对象,这就是为什么更改一个对象会更改另一个对象(另请参阅 Assignment statements 上的参考)。
由于 mat[1:]
是列表的列表,您最好的选择可能是在赋值时使用 copy.deepcopy()
(另请参阅 documentation of copy
)。
This post 还包含对各种复制方法的一些很好的解释。