【问题标题】:Global variable gets modified by local variable?全局变量被局部变量修改?
【发布时间】:2021-02-28 09:17:20
【问题描述】:

我在 python 3.7.9 上。

-我需要将列表中的一些项目复制到另一个列表中。

-然后我需要对我的新列表进行计算而不更改原始列表。

但无论我做什么,我的原始列表都会经历与新列表相同的修改。

谁能解释一下为什么?

感谢您的回复

调试模式:

【问题讨论】:

    标签: python list variables del


    【解决方案1】:

    这种现象在python中称为浅拷贝。

    基本上,

     reduite=mat[1:]
    

    正在引用 mat 的内部对象(也是数组),因此修改副本数组会反映在原始对象上。

    使用deepcopy 来解决这个问题。

    【讨论】:

      【解决方案2】:

      在您的代码中,您正在分配:

      reduite = mat[1:]
      

      这仅绑定 reduitemat 的元素。

      换句话说,变量现在引用内存中的相同对象,这就是为什么改变一个会改变另一个(另见Assignment statements上的参考)。

      由于mat[1:] 是一个列表列表,您最好的选择可能是在分配时使用copy.deepcopy()(另请参阅documentation of copy)。

      This post 还包含对各种复制方法的一些很好的解释。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-24
        • 2017-11-08
        • 1970-01-01
        • 1970-01-01
        • 2023-03-14
        • 1970-01-01
        相关资源
        最近更新 更多