在某些情况下,Python 2.6 会自动将函数定义中的变量变为全局变量?为什么?

标签 python debugging global-variables issue-tracking local-variables

我对为什么会发生以下情况感到非常震惊:

这是我的代码:


def add_one(array):

    new_array = array
    length = len(array)

    for i in range(length):

        new_array[i] = new_array[i]+1


    return new_array

x = [1,2,3,4,5];
y = add_one(x)

print x

print y

结果如下:

[2, 3, 4, 5, 6]

[2, 3, 4, 5, 6]

我不明白为什么 x 改变了。

我的推测: x 以某种方式作为全局变量提供给函数 add_one。我包含了“new_array = array”,这样如果 array 不知何故是全局变量 x,x 就不会改变。然而,当'new_array = array'被执行时,不知何故new_array也变成了全局变量x。我写了一个函数 add_one 的替代版本,它没有给我带来问题:


def add_one(array):

    new_array = []
    length = len(array)

    for i in range(length):
        new_array.append(array[i]+1)

似乎如果局部变量(即数组)在函数中由其索引编辑,相对于作为该函数输入的全局变量,它会变成全局变量?

我不知道发生了什么。任何解释将不胜感激。

最佳答案

当您说 new_array = array 时,您并不是在复制该数组,而只是为该数组创建了另一个名称。这两个名称仍然适用于同一个数组。

复制最简单的方法是使用切片:new_array = array[:]

关于在某些情况下,Python 2.6 会自动将函数定义中的变量变为全局变量?为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5737082/

相关文章:

python - DNA 从字符串列表中找到所有匹配项 (python 2.7)

Python - While 假循环

javascript - 如何在 Window 的嵌入式浏览器中调试 Javascript?

c - 全局数组问题不更新,C 编程

python - 是否可以为数据框的每一列创建一个额外的 pct_change 列?

python - 如何从 C 语言访问 python 字典?

java - 与目标虚拟机断开连接

c++ - 如何使用 CMake 项目调试 QML

javascript - 为什么这个 Jasmine 测试在 Firefox 中偶尔会失败

python - 有没有一种方法可以更改 for 循环中的全局函数而不是创建一个新函数?