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

1 python debugging global-variables local-variables issue-tracking

我完全不知道为什么会发生以下情况:

这是我的代码:


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
Run Code Online (Sandbox Code Playgroud)

结果如下:

[2, 3, 4, 5, 6]

[2, 3, 4, 5, 6]
Run Code Online (Sandbox Code Playgroud)

我不明白为什么x被改变了.

我的推测:不知何故,x作为函数add_one的全局变量给出.我包含'new_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)
Run Code Online (Sandbox Code Playgroud)

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

我不知道发生了什么事.任何解释都将受到高度赞赏.

Mar*_*som 6

当你说new_array = array,你没有复制数组时,你只需要为数组创建另一个名称.这两个名称仍然适用于同一个数组.

要制作副本,最简单的方法是使用切片: new_array = array[:]