3 回答
TA贡献1847条经验 获得超11个赞
区别是相当大的!在
a_list[:] = ['foo', 'bar']
您修改绑定到名称的现有列表a_list。另一方面,
a_list = ['foo', 'bar']
为名称分配一个新列表a_list。
也许这会有所帮助:
a = a_list = ['foo', 'bar'] # another name for the same list
a_list = ['x', 'y'] # reassigns the name a_list
print a # still the original list
a = a_list = ['foo', 'bar']
a_list[:] = ['x', 'y'] # changes the existing list bound to a
print a # a changed too since you changed the object
TA贡献1836条经验 获得超4个赞
通过分配给a_list[:],a_list仍引用相同的列表对象,但内容已修改。通过分配给a_list,a_list现在引用一个新的列表对象。
查看其id:
>>> a_list = []
>>> id(a_list)
32092040
>>> a_list[:] = ['foo', 'bar']
>>> id(a_list)
32092040
>>> a_list = ['foo', 'bar']
>>> id(a_list)
35465096
如您所见,它id不会随切片分配版本而改变。
两者之间的不同可能导致完全不同的结果,例如,当列表是函数的参数时:
def foo(a_list):
a_list[:] = ['foo', 'bar']
a = ['original']
foo(a)
print(a)
与此同时,a也进行了修改,但是如果 a_list = ['foo', 'bar']改用了它,则a保留其原始值。
添加回答
举报