Python函数调用中莫名其妙的运算符行为?

时间:2019-01-12 11:16:26

标签: python python-3.x

能否请人解释为什么以下操作在传递给函数时结果不相等?

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]

1 个答案:

答案 0 :(得分:0)

从第一个代码段的输出中可以看到,id(lis)在分配lis + [1]之后发生了变化。 lis + [1]的作用是创建一个新列表,然后将其分配回lis。这就是为什么您得到不同的id(在您的情况下为45004000与45004160)的原因。不会持续引用list1

另一方面,lis += [1] 变异 lis,就地进行更改。由于id一致(输出中为45200888),因此可以说它就位。与以前相同,id之下,它将持续回到list1,并对其进行突变。