可能是重复问题:
为什么在列表上使用+=会表现出意外行为?
今天我发现了 Python 语言的一个有趣的“特性”,这让我苦恼不已。
>>> a = [1, 2, 3]
>>> b = "lol"
>>> a = a + b
TypeError: can only concatenate list (not "str") to list
>>> a += b
>>> a
[1, 2, 3, 'l', 'o', 'l']
怎么会这样?我认为这两个应该是等价的!更糟的是,这就是我曾经费了很大功夫才排查出来的代码。
>>> a = [1, 2, 3]
>>> b = {'omg': 'noob', 'wtf' : 'bbq'}
>>> a = a + b
TypeError: can only concatenate list (not "dict") to list
>>> a += b
>>> a
[1, 2, 3, 'omg', 'wtf']
我靠!我的代码里有列表和字典,但我竟然在没有调用.keys()的情况下把字典的键附加到了列表中。原来是这样。
我以为这两个语句是等价的。即使忽略这个,我也可以理解将字符串添加到列表中的方式(因为字符串只是字符数组),但是字典呢?也许如果它附加了一个(键,值)元组列表,那么仅获取键并将其添加到列表中似乎是完全随意的。
有人知道其中的逻辑吗?