能否请人解释为什么以下操作在传递给函数时结果不相等?
lis=lis+[1]
lis+=[1]
那不应该吗?
问题源自以下代码:
def f1(lis):
lis=lis+[1]
print(id(lis))
list1=[0]
print("before function", id(list1))
f1(list1)
print("after function", id(list1))
print(list1)
功能45004000之前的
45004160
后功能45004000
[0]
为什么没有像下面这样向list1
添加“ 1”?
def f1(lis):
lis+=[1]
print(id(lis))
list1=[0]
print("before function", id(list1))
f1(list1)
print("after function", id(list1))
print(list1)
功能45200888之前
45200888
后功能45200888
[0,1]
答案 0 :(得分:0)
从第一个代码段的输出中可以看到,id(lis)
在分配lis + [1]
之后发生了变化。 lis + [1]
的作用是创建一个新列表,然后将其分配回lis
。这就是为什么您得到不同的id
(在您的情况下为45004000与45004160)的原因。不会持续引用list1
。
另一方面,lis += [1]
变异 lis
,就地进行更改。由于id
一致(输出中为45200888),因此可以说它就位。与以前相同,id
之下,它将持续回到list1
,并对其进行突变。