我无法解释以下行为:
l1 = [1, 2, 3, 4]
l1[:][0] = 888
print(l1) # [1, 2, 3, 4]
l1[:] = [9, 8, 7, 6]
print(l1) # [9, 8, 7, 6]
它似乎是l1[:][0]指副本,而是l1[:]指对象本身.
Ara*_*Fey 13
这是由python的功能引起的,它允许您将列表分配给另一个列表的切片,即
l1 = [1,2,3,4]
l1[:2] = [9, 8]
print(l1)
将设置l1的前两个值到9和8分别.同样的,
l1[:] = [9, 8, 7, 6]
为所有元素分配新值l1.
有关文档中的分配的更多信息.
l1[:][0] = 888首先获取l1(l1[:])中所有元素的切片,其中(按照列表语义)返回一个包含所有对象的新列表对象l1- 它是一个浅表副本l1.
然后它用integer 888([0] = 888)替换该复制列表的第一个元素.
然后,复制的列表将被丢弃,因为没有任何操作.
您的第二个示例l1[:] = [9, 8, 7, 6] 将所有元素替换l1为列表中的元素[9, 8, 7, 6].这是一个切片分配.
| 归档时间: | 
 | 
| 查看次数: | 372 次 | 
| 最近记录: |