【问题标题】:Difference between "a += b" and "a = a + b" on a list in Python [duplicate]Python中列表上“a += b”和“a = a + b”之间的区别[重复]
【发布时间】:2020-04-18 05:58:44
【问题描述】:

在 Python 中,如果我运行

test_list = []
test_list += [1]
print(id(test_list))

我可以发现test_list的身份没有改变。

但是,如果我运行

test_list = []
test_list = test_list + [1]
print(id(test_list))

输出显示身份已更改。

有什么区别?

我在编写带有列表作为参数的递归函数时发现了这一点,其中函数外部的变量因运算符 += 而受到影响。

a += ba = a + b 不一样吗?

【问题讨论】:

  • “a += b 不等于 a = a + b 吗?” - 不,这是 Python 对新手来说最大的惊喜之一。
  • a += b 修改现有列表,这是一个就地添加 (__iadd__) 而a + b 创建一个新列表。

标签: python


【解决方案1】:

在 python 中 a += b 的行为方式并不总是与 a = a + b 相同,相同的操作数在不同的条件下可能会给出不同的结果。

示例 1:-

list1 = [5, 4, 3, 2, 1] 
list2 = list1 
list1 += [1, 2, 3, 4] 
print(list1) 
print(list2) 

给出输出:-

[5, 4, 3, 2, 1, 1, 2, 3, 4]
[5, 4, 3, 2, 1, 1, 2, 3, 4]

示例 2:-

list1 = [5, 4, 3, 2, 1] 
list2 = list1 
list1 = list1 + [1, 2, 3, 4] 

print(list1) 
print(list2) 

给出输出:-

[5, 4, 3, 2, 1, 1, 2, 3, 4]
[5, 4, 3, 2, 1]

list1 的内容与上面的 Example1 相同,但 list2 的内容不同。 [5、4、3、2、1、1、2、3、4] [5、4、3、2、1]

表达式 list1 += [1, 2, 3, 4] 就地修改列表,意味着它扩展了列表,使得“list1”和“list2”仍然具有对同一个列表的引用。

表达式 list1 = list1 + [1, 2, 3, 4] 创建一个新列表,并将“list1”引用更改为该新列表,而“list2”仍引用旧列表。

【讨论】:

    猜你喜欢
    • 2016-05-04
    • 1970-01-01
    • 2014-12-05
    • 1970-01-01
    • 2019-12-18
    • 2017-04-26
    • 1970-01-01
    • 1970-01-01
    • 2012-06-26
    相关资源
    最近更新 更多