l1是一个列表,l2 = l1; 为什么不"l2 = l2 + [item]"影响l1而"l2 + = [item]"呢?

red*_*ice 2 python list

可能重复:
什么是加等号(+ =)做在Python?

我注意到一个奇怪的问题:

    l1 = ['1', '2', '3']
    l2 = l1

    item = l2.pop(0)
    # the pop operation will effect l1
    print l1

    l2 = l2 + [item]
    # why "l2 = l2 + [item]" does't effect l1 while "l2 += [item]" does.
    print l2
    print l1
Run Code Online (Sandbox Code Playgroud)

输出是:

['2', '3']
['2', '3', '1']
['2', '3']
Run Code Online (Sandbox Code Playgroud)

但是,如果我改变l2 = l2 + [item]l2 += [item],输出将是:

['2', '3']
['2', '3', '1']
['2', '3', '1']
Run Code Online (Sandbox Code Playgroud)

glg*_*lgl 5

++=是不同的运营商woth如所描述的不同的内部含义这里.

l2 = l1 + x呼吁l2 = l1.__add__(x),如果不工作调用x.__radd__(l1).两者都应该返回一个形成操作结果的新对象,与旧的对象无关,因此不会影响l1.

l2 += x调用l2 = l2.__iadd__(x)("增强赋值"),并且只有在这不起作用时,才会回退到l2 = l2 + x如上所述.

对于数字,两者都是相同的,因为它们是不可变的,因此无法修改+=,而在列表上,+返回一个新对象,同时+=修改左侧一个.

由于后面的对象l2被修改并l1引用相同的对象,您l1也会注意到更改.