首页 > 解决方案 > 既然 slice 做了浅拷贝,为什么它可以用来更新原始的可变集合?

问题描述

我知道 slice 操作符做了一个浅拷贝。

但是当我在整数列表上使用切片运算符并对切片进行突变时,突变会反映在原始列表中。由于整数是不可变的,结果让我很困惑。

x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print("Before slicing...")
print(x)
print("Slicing...")
x[1::2]=[0]*len(x[1::2])
print("After slicing...")
print(x)
x[2:2]=[1]
print(x)

输出是

Before slicing...
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Slicing...
After slicing...
[1, 0, 3, 0, 5, 0, 7, 0, 9, 0]
[1, 0, 1, 3, 0, 5, 0, 7, 0, 9, 0]

既然x[1::2]并且x[2:2]做了浅拷贝,为什么对它的更改会反映在原始列表中?

标签: pythonsliceshallow-copy

解决方案


推荐阅读