我想请教您关于Python中切片运算符的行为的帮助.
L[:]
创建列表的浅表副本L.为了验证它,可以打印
id(L), id(L[:])
并注意它们是不同的.del L[:]
从原始对象中
删除引用.它使原始列表为空 - 而不是它的浅层副本.当然我同意创建一个浅拷贝,然后删除它的引用,没有多大意义,所以我理解这里我们想要在原始列表上操作.是否有任何规则说当切片运算符创建一个浅拷贝而不是什么时候?如何在不手动测试的情况下了解它?
我搜索了这个并找到了以下主题:
但不幸的是他们没有回答我的问题,至少我没有看到它.
del L[:]是一个独特的访问操作L[:],这是一个独特的操作L[:] = x.
del L[:]__delitem__用slice对象调用对象.L[:]__getitem__用该slice对象调用.L[:] = x__setitem__用slice对象调用x.这三种操作可以以非常不同的方式实现,具体取决于对象的内容.对于内置列表类型,__delitem__擦除切片中指定__setitem__的项目,将项目替换为给定的项目,并__getitem__返回由指定元素组成的新(复制)列表.
但是,并非所有对象都必须以这种方式运行.例如,对于NumPy array,__getitem__使用切片返回数组的视图而不是副本 - 修改视图会更改原始数组.
| 归档时间: |
|
| 查看次数: |
266 次 |
| 最近记录: |