Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 什么时候使用完整列表切片?_Python_List_Slice - Fatal编程技术网

Python 什么时候使用完整列表切片?

Python 什么时候使用完整列表切片?,python,list,slice,Python,List,Slice,所以我明白如果我有一张这样的清单 >>> dinner = ['steak', 'baked potato', 'red wine'] 然后,具有未指定起始点和终结点的切片就是整个列表 >>> dinner[:] ['steak', 'baked potato', 'red wine'] 我的问题是,这个完整的列表片段是否在实践中使用过,如果是,它的用例是什么?为什么不在不使用切片符号[:]的情况下引用列表呢?完整的列表切片是制作列表浅层副本的常用Pyth

所以我明白如果我有一张这样的清单

>>> dinner = ['steak', 'baked potato', 'red wine']
然后,具有未指定起始点和终结点的切片就是整个列表

>>> dinner[:]
['steak', 'baked potato', 'red wine']

我的问题是,这个完整的列表片段是否在实践中使用过,如果是,它的用例是什么?为什么不在不使用切片符号[:]的情况下引用列表呢?

完整的列表切片是制作列表浅层副本的常用Python语法

>>> dinner = ['steak', 'baked potato', 'red wine']
>>> dinner1 = dinner  # just another reference to the original object
>>> dinner2 = dinner[:]  # makes a new object
>>> dinner[0] = 'spam'
>>> dinner1  # dinner1 reflects the change to dinner
['spam', 'baked potato', 'red wine']
>>> dinner2  # dinner2 doesn't reflect the change to dinner
['steak', 'baked potato', 'red wine']

如果只引用原始列表而没有切片,则在新引用中还将看到对原始列表的更改。这有时是你想要的,有时不是你想要的

完整列表片是制作列表浅拷贝的常用Python语法

>>> dinner = ['steak', 'baked potato', 'red wine']
>>> dinner1 = dinner  # just another reference to the original object
>>> dinner2 = dinner[:]  # makes a new object
>>> dinner[0] = 'spam'
>>> dinner1  # dinner1 reflects the change to dinner
['spam', 'baked potato', 'red wine']
>>> dinner2  # dinner2 doesn't reflect the change to dinner
['steak', 'baked potato', 'red wine']

如果只引用原始列表而没有切片,则在新引用中还将看到对原始列表的更改。这有时是你想要的,有时不是你想要的

如果在赋值运算符的LHS上使用,则使用完整的列表切片来就地修改列表:

否则,当您需要修改/改变原始列表时(例如在循环中),完整列表切片通常很方便,并且您需要保留一个引用副本,更恰当地称为浅层副本:

for i in dinner[:]:
    # mutate dinner without running into problems
这允许for循环的行为与原始列表的状态一致


您也可以通过使用或调用原始列表上的列表来创建浅层副本,但[:]更常用,因为它是一种语言结构,也不太冗长。

如果在赋值运算符的LHS上使用,则使用完整的列表片段来就地修改列表:

否则,当您需要修改/改变原始列表时(例如在循环中),完整列表切片通常很方便,并且您需要保留一个引用副本,更恰当地称为浅层副本:

for i in dinner[:]:
    # mutate dinner without running into problems
这允许for循环的行为与原始列表的状态一致


您也可以通过使用或调用原始列表上的列表来创建浅层副本,但[:]更常用,是一种语言结构,也不太冗长。

要创建副本,例如,如果您要迭代和修改同一列表。要创建副本,例如,如果您想迭代和修改同一个列表,您还可以分配给切片以修改原始列表,甚至可以将其清空,例如,晚餐[:]=[],因此在python中,变量是指向列表的指针,而不是列表本身。现在使用这种表示法是有意义的。@wogsland我强烈建议您注意这一点,您也可以将其指定给切片以修改原始列表,甚至可以将其清空,例如,晚餐[:]=[],因此在python中,变量是指向列表的指针,而不是列表本身。现在使用这种表示法是有意义的。@wogsland我强烈建议观察这种在循环中传递副本似乎非常方便。在循环中传递副本似乎非常方便。