所以基本上我已经观察到在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)
当我运行该功能时,它会更改实际列表。
现在我的问题:为什么会发生这种情况,我在哪里可以阅读更多相关内容(老实说我不知道如何用谷歌搜索),我该怎样才能避免这种情况。请随意将我重定向到其他文章,因为这可能是一个常见的问题,但老实说,我找不到类似的东西。
提前致谢:)
答案 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中的函数,则在概念上类似于通过引用传递。