考虑以下代码:
>>> x = y = [1, 2, 3, 4]
>>> x += [4]
>>> x
[1, 2, 3, 4, 4]
>>> y
[1, 2, 3, 4, 4]
Run Code Online (Sandbox Code Playgroud)
然后考虑这个:
>>> x = y = [1, 2, 3, 4]
>>> x = x + [4]
>>> x
[1, 2, 3, 4, 4]
>>> y
[1, 2, 3, 4]
Run Code Online (Sandbox Code Playgroud)
为什么这两个有区别?
(是的,我试着寻找这个).
为什么这样呢
l = [1,2,3]
l += 4,5,6
Run Code Online (Sandbox Code Playgroud)
工作,而这
l = [1,2,3] + (4,)
Run Code Online (Sandbox Code Playgroud)
才不是?
如果我尝试第二个,我得到一个TypeError: can only concatenate list (not "tuple") to list,这是有道理的.
但第一个版本应该做同样的事情.在第二行中,4,5,6应该创建一个元组,如下例所示:
>>> t = 4,5,6
>>> type(t)
<type 'tuple'>
Run Code Online (Sandbox Code Playgroud)
创建元组后,+ =应该只添加到列表中l.所以这里也应该抛出某种错误,但事实并非如此.
有谁知道这里发生了什么?
这种行为在Python 2.7.11和Python 3.5.1之间是一致的.
有人可以解释一下这种行为:
>>> a = {'hello':'world' , 'good':'food'}
>>> b = [1,2]
>>> b = b + a
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can only concatenate list (not "dict") to list
>>> b += a
>>> b
[1, 2, 'good', 'hello'] <--- Why do the keys get added when dict cannot be added to a list
>>>
Run Code Online (Sandbox Code Playgroud) 在Python(2.7)中发现了前所未有的有趣之处.
这个:
a = []
a += "a"
Run Code Online (Sandbox Code Playgroud)
工作和结果是:
>>> a
>>> ["a"]
Run Code Online (Sandbox Code Playgroud)
但
a = []
a = a + "a"
Run Code Online (Sandbox Code Playgroud)
给
>>> TypeError: can only concatenate list (not "str") to list
Run Code Online (Sandbox Code Playgroud)
有人可以解释原因吗?谢谢你的回答.