当我这样做时
a = [1]
a.append(2)
print a
结果是[1,2]
- 但结果是
print [1].append(2)
是None
。
我的理解是a
是列表对象[1]
的引用。 python中的所有东西都是对象。 [1]
也是一个列表对象。 a
和[1]
应完全相同。
为什么结果完全不同?
答案 0 :(得分:4)
您误解了代码。差异与变量无关;在第二种情况下,您将从append
打印返回值,但附加始终将返回None。如果您在第一个代码中打印了a.append(2)
,那么也将获得无,除了a
在此期间会被修改。
答案 1 :(得分:4)
None
是list.append
上方法调用的结果。 append
修改了列表并且不返回新列表。因此,您基本上已将2
附加到[1]
,但由于您从未存储过该列表,因此无法查看结果。
append
不返回值(None
除外)的事实暗示该方法已经产生副作用(在这种情况下会改变其参数)。
如果您想在每次附加到列表时返回新对象,则应使用+
代替:
a = [1]
a + [2]
>>> [1, 2]
a
的价值现在不会改变:
a
>>> [1]
你可以任意链接
a + [2] + [3,4] + [5]
>>> [1, 2, 3, 4, 5]
答案 2 :(得分:3)
在
print [1].append(2)
您正在打印list.append
方法的结果,即None
。
答案 3 :(得分:3)
在第一个示例中,您将2添加到列表[1]
,然后打印列表,输出符合预期。
在第二个示例中,您打印[1].append(2)
的返回值。这里发生的是您打印append
的返回值,即None
。
但是,如果您有对列表的引用,则可以检查它是否已被修改。这个小小的演示应该清楚说明会发生什么:
>>> a = [1]
>>> print a.append(2) # This will print None
None
>>> a
[1, 2]