为什么此参数列表在Python中不会更改?

时间:2019-11-15 00:31:50

标签: python python-3.x list variable-assignment

我创建了一个函数f,该函数使用二维列表作为参数,但是在此函数之后,列表完全不变。 如下面的代码:

def f(t: [[int]]):
    for eachrow in t:
        eachrow = eachrow[1:]
        eachrow.append(0)

A = [[2, 10, 0], [3, 1, 2], [3, 2, 1]]

f(A)

print(A)  # -> [[2, 10, 0], [3, 1, 2], [3, 2, 1]]

2 个答案:

答案 0 :(得分:3)

eachrow中分配给eachrow = eachrow[1:]会覆盖它。因此,要删除第一个元素,可以使用delrow.popslice assignment

def f(t):
    for row in t:
        del row[0]  # OR row.pop(0) OR row[:] = row[1:]
        row.append(0)

A = [[2, 10, 0], [3, 1, 2], [3, 2, 1]]
f(A)
print(A)  # -> [[10, 0, 0], [1, 2, 0], [2, 1, 0]]

答案 1 :(得分:-1)

如果打印出对eachrow所做更改的结果,则会看到您正在更新eachrow变量,但这不会影响原始的t变量。

def f(t):
    for eachrow in t:
        eachrow = eachrow[1:]
        eachrow.append(0)
        print(eachrow)
>>> f(A)
[10, 0, 0]
[1, 2, 0]
[2, 1, 0]

如果要影响数组本身,则应按以下方式修改数组:

def f(t):
    for row_number in range(len(t)):
        t[row_number] = t[row_number][1:]
        t[row_number].append(0)