列表的副作用:如何确保函数中的列表输入保持不变

时间:2019-02-19 09:43:36

标签: python

即使我已经完成了从提供的矩阵列表中切出的m个列表变量中的所有操作,为什么提供的列表也会被更改。

def matrixflip(matrix, d):
    m = matrix[:]
    lenghth = len(m)
    if d == 'h':
        for i in m:
            i.reverse()
        return m

    elif d == 'v':
        for i in range(lenghth//2):
            for j in range(len(m[0])):
                (m[i][j] , m[lenghth-1-i][j]) = (m[lenghth-1-i][j] , m[i][j])
        return m
    else : return m


myl = [[1, 2], [3, 4]]
p = matrixflip(myl,'v')
print(p)
print (myl)

[[3,4],[1,2]]

[[3,4],[1,2]]

但是我需要保持输入矩阵(myl)不变

1 个答案:

答案 0 :(得分:1)

切片不会进行复制。它只会做副本。

因此,在对列表列表进行切片时,将仅获得外部列表的副本,但是该副本将引用相同内部列表。 / p>

因此,当您修改该内部列表时,该修改将从您的原始外部列表以及该切片创建的该外部列表的副本中可见。

要执行深度复制,请import copy,然后致电copy.deepcopy(my_list_name)