我是一个相对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)
会从1
和a
中删除元素lista
。
谢谢!
答案 0 :(得分:0)
Python对象是通过对象引用传递给函数的(ruby调用这个pass-by-reference,但它与C ++ pass-by-reference不同)。这意味着您分配给lista
的参数是原始对象a
,只需使用相同数据的新命名参考对象。
如果您改为复制列表,则不会影响原始
x = test(lista=list(a))