python中a = [1]和[1]之间有什么区别?

时间:2015-12-30 09:54:11

标签: python list

当我这样做时

a = [1]
a.append(2)
print a

结果是[1,2] - 但结果是

print [1].append(2)

None

我的理解是a是列表对象[1]的引用。 python中的所有东西都是对象。 [1]也是一个列表对象。 a[1]应完全相同。 为什么结果完全不同?

4 个答案:

答案 0 :(得分:4)

您误解了代码。差异与变量无关;在第二种情况下,您将从append打印返回值,但附加始终将返回None。如果您在第一个代码中打印了a.append(2),那么将获得无,除了a在此期间会被修改。

答案 1 :(得分:4)

Nonelist.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]