为什么函数外部的列表被另一个函数内的东西修改? (Python 3.4)

时间:2016-02-27 03:33:51

标签: python python-3.x

我是一个相对python的新手。我在这里有一个简单的函数,它接受一个列表并删除列表的一个元素。但是,我注意到该函数实际上改变了函数之外的列表。例如,

def test(lista):
    lista.remove(1)
    return(lista)

def main():
    a = [1,2,3]

    print(a)

    x = test(lista=a)

    print(a)

事实证明,第一次拨打print(a)时,我按预期得到了[1, 2, 3],但是第二次拨打print(a),我得到的[2, 3]并不完全对我有意义,因为我不确定为什么函数test会从a中删除元素。我了解到我将a作为参数传递,但我不确定为什么lista.remove(1)会从1a中删除元素lista

谢谢!

1 个答案:

答案 0 :(得分:0)

Python对象是通过对象引用传递给函数的(ruby调用这个pass-by-reference,但它与C ++ pass-by-reference不同)。这意味着您分配给lista的参数是原始对象a,只需使用相同数据的新命名参考对象。

如果您改为复制列表,则不会影响原始

x = test(lista=list(a))