我在努力:
>>> a = []
>>> id(a)
42952968L
>>> a.append(1)
>>> a
[1]
>>>id(a)
42952968L
>>> a += [2]
>>> a
[1, 2]
>>> id(a)
42952968L
>>> a = a +[3]
>>> a
[1, 2, 3]
>>> id(a)
43001480L
我知道我们用的是a.append(1)
或a += [2]
,而id(a)
不是改变。什么时候使用a = a +[3]
更改id(a)
。你知道吗
现在,我喜欢这样:
>>> c = ([], [])
>>> id(c)
43002440L
>>> c[0].append(1)
>>> c
([1], [])
>>> id(c)
43002440L
>>> c[0] += [2]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
>>> c
([1, 2], [])
>>> id(c)
43002440L
我使用c[0].append(1)
是对的,当我尝试c[0] += [2]
时,我得到了一个类型错误。但是我发现c
值已更改。你知道吗
请使用
而不是
c[0] += [2]
发生在多个步骤中,大致相当于以下步骤:首先,Python得到
c[0]
。那部分很好用。你知道吗第二部分可能看起来有点奇怪。Python要求它作为
c[0]
得到的对象将[2]
添加到它自己的适当位置。列表[1]
要求,成为[1, 2]
。其他数据类型可能无法就地实现此功能,从而返回一个新对象。列表修改自己并返回自己。你知道吗然后,Python尝试将
[1, 2]
分配给c[0]
。这个步骤失败,给出了一个TypeError
,但是列表已经在步骤2中被修改了。你知道吗Python中的
tuple
是不可变的对象。因此不能修改它们。你知道吗c[0]
在本例中是对该元组的第一个项/槽的引用,当您尝试用+=
将赋值给它时,该引用会用上述TypeError
失败。你知道吗考虑使用:
c[0].extend([2])
工作的原因是c[0]
是对list
实例的引用,而不是tuple
的插槽。因此,修改它与修改任何list
引用/变量一样。你知道吗相关问题 更多 >
编程相关推荐