列出函数内的变量赋值,导致对全局变量进行不必要的更改

List variable assignment inside a function causing unwanted change to the global variable

我正在尝试创建输入到函数中的列表的副本,然后重新分配复制列表的值之一,然后 return 新列表。

w return 如我所料正确编辑。但是,当我 运行 这个函数时,它改变了我原来的列表。

a = [[0,1],[2,3]]

def func(l):
    w = l
    w[0][0] = 55
    
    return w
        
func(a)

print(a)
Output: [[55, 1], [2, 3]]

我想看:

func(a)

print(a)
Output: [[0, 1], [2, 3]]

我原以为函数内部的任何改变都不会影响全局变量。如何在不更改 a 的情况下将函数设为 return w(使用重新分配的值)?

您只是在再次引用列表,实际上并没有创建新变量。

使用copy模块

import copy
a = [[0, 1], [2, 3]]


def func(l):
    w = copy.deepcopy(l)
    w[0][0] = 55

    return w


func(a)

print(a)

>>> [[0, 1], [2, 3]]