Python中的函数编辑列表

时间:2015-04-14 20:44:35

标签: python python-3.x

所以基本上我已经观察到在python3中如果我做了像

这样的事情
a = 5
def addFive(x):
    x+=5
    return x
print(addFive(a),a)

输出将是" 10 5"因为a没有被功能改变。 但是对于列表不会发生同样的情况:

a = [1,2,3]

def b(x):
    z = x
    z.append(10)

b(a)
print(a)

当我运行该功能时,它会更改实际列表。

现在我的问题:为什么会发生这种情况,我在哪里可以阅读更多相关内容(老实说我不知道​​如何用谷歌搜索),我该怎样才能避免这种情况。请随意将我重定向到其他文章,因为这可能是一个常见的问题,但老实说,我找不到类似的东西。

提前致谢:)

2 个答案:

答案 0 :(得分:1)

使用copy模块。

import copy

a = [1,2,3]

def b(x):
    z = copy.deepcopy(x)
    z.append(10)
    return z

b(a)
print(a)

打印

[1, 2, 3, 10]
[1, 2, 3]

答案 1 :(得分:0)

Python list中的每个元素都是内存中的一个位置,因此当您修改元素时,实际上是在内存中修改该引用。因此,如果您熟悉C ++,将列表传递给Python中的函数,则在概念上类似于通过引用传递。