写python代码时出现了一个很诡异的问题,怎么想都不明白,为什么会这样啊?

就比如说这个

global n
a = [[1, 2], [3, 4]]
n = a


def act(list1):
    global n
    n[0][0] += 1
    return list1


print(act(a))

最后打印出来居然是[[2, 2], [3, 4]]

???这是什么原理啊

求大佬解答...

因为n和a实际上指向同一个列表。除非你
n = a[:] 复制下

这算是参数传引用问题了,如果你传入参数是一个int或tuple这种不可修改的参数,在函数里修改之后全局是不会改变的,因为修改之后变量的地址就会发生变化,即原来存放数据的地方变了,但list内容是可修改的,所以直接修改了全局变量的内容

  • a=[[1,2],[3,4]]-------创建对象[[1,2],[3,4]],并把a指向给这个对象
  • n=a -----------------将n指向这个对象
  • n[0][0]+=1----------对象[[1,2],[3,4]]=====>[[2,2],[3,4]]
  • 此时n和a均指向[[2,2],[3,4]
  • return a即retrun [[2,2],[3,4]]

建议使用n = a.copy() 赋值