为什么 p[:] 在这两种情况下设计成工作方式不同?
- 论坛
- 为什么 p[:] 在这两种情况下设计成工作方式不同?
7 浏览
为什么 p[:] 在这两种情况下设计成工作方式不同?
p = [1,2,3]
print(p) # [1, 2, 3]
q=p[:] # 假设进行浅拷贝
q[0]=11
print(q) #[11, 2, 3]
print(p) #[1, 2, 3]
# 上述代码证实了q不是p,而是一个独立的副本
del p[:] # 为什么这样不会创建一个副本然后删除那个副本?
print(p) # []
以上证实了p[:]在这两种情况下的行为不同。是吗?
考虑到在下面的代码中,我希望直接使用p而不是p的副本,
p[0] = 111
p[1:3] = [222, 333]
print(p) # [111, 222, 333]
我感到困惑的是
del p[:]
与p[:]一致,都是引用原始列表
但是
q=p[:]
令人困惑(对于像我这样的新手),因为在这种情况下,p[:]会生成一个新列表!
我的新手期望是
q=p[:]
应该与
q=p
相同,为什么创建者允许这种特殊行为生成一个副本呢?