为什么下面两个例子会有不同的结果?我认为对列表进行切片将导致列表元素的(浅层)副本,因此a
在这两种情况下都不应更改。你知道吗
>>> a = [1, 2, 3, 4, 5]
>>> a[3: 5] = [0, 0] # example 1
>>> a
[1, 2, 3, 0, 0] # elements in the original list are changed
>>> b = a[3: 5] # example 2
>>> b = [100, 100]
>>> a # elements in the original list are unchanged
[1, 2, 3, 0, 0]
Slicing的行为不同,这取决于它是在表达式中使用(例如,在赋值的右侧)还是在赋值的目标/左侧。如果切片也在左侧创建了一个浅拷贝,则不可能直接更改列表的切片,赋值的结果也将丢失。你知道吗
列表片段根据上下文的不同而不同:
这是一个片分配,意思是将值
[0, 0]
分配给a
中的一个节。这显然改变了a
。你知道吗这将创建
a
部分的副本,并将其分配给b
。它与a
无关。修改b
根本不会影响a
。你知道吗将切片与切片分配混淆。切片创建新列表,切片分配修改现有列表。你知道吗
修改列表本身:
为切片零件创建新列表:
将b的内容更改为其他新列表
使用
id
检查它们是否相同:相关问题 更多 >
编程相关推荐