对整个列表进行切片的切片分配与直接分配之间有什么区别?

我在很多地方看到对lists 使用切片分配。与(非默认)索引一起使用时,我能够理解它的用法,但是我无法理解其用法,例如:


a_list[:] = ['foo', 'bar']

有什么不同


a_list = ['foo', 'bar']


Cats萌萌
浏览 944回答 3
3回答

回首忆惘然

区别是相当大的!在a_list[:] = ['foo', 'bar']您修改绑定到名称的现有列表a_list。另一方面,a_list = ['foo', 'bar']为名称分配一个新列表a_list。也许这会有所帮助:a = a_list = ['foo', 'bar'] # another name for the same lista_list = ['x', 'y'] # reassigns the name a_listprint a # still the original lista = a_list = ['foo', 'bar']a_list[:] = ['x', 'y'] # changes the existing list bound to aprint a # a changed too since you changed the object

HUH函数

通过分配给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保留其原始值。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python