python - var




python-3.x (2)

赋值 var = [] 名称 var 绑定 到新创建的列表。 名称 var 可能已绑定或可能未绑定到任何其他列表,如果已绑定,则该列表将保持不变。

另一方面, var[:] = [] 期望 var 已经绑定到列表,并且该列表就地更改。

这就是为什么这两种情况下的行为不同:

var1 = [1, 2, 3]
var2 = var1
var1 = []
print(var1, var2)  # prints [] [1, 2, 3]

var1 = [1, 2, 3]
var2 = var1
var1[:] = []
print(var1, var2)  # prints [] []

这个问题已经在这里有了答案:

我通常了解切片在赋值运算符左右的行为。

但是,我已经在Python(3.8.0)手册中看到了这一点,并试图找出我所缺少的东西。

通过将所有元素替换为空列表来清除列表

字母[:] = []

与仅 letters = [] 什么不同?

(搜索 [:] 并不容易,因为stackoverflow认为您正在寻找标签。因此,如果已经有答案,我将找不到它。)

我看到一些不相关的答案。 因此,为了明确起见,问题不在于 [:] 片意味着什么,而是关于将 列表分配给一个。


这段代码演示了正在发生的事情:

original = ['a','b','c']

letters = original

print('Same List')
print(original)
print(letters)

letters = []

print('Different lists')
print(original)
print(letters)

letters = original

letters[:] = []

print('Same list, but empty')
print(original)
print(letters)

输出:

Same List
['a', 'b', 'c']
['a', 'b', 'c']
Different lists
['a', 'b', 'c']
[]
Same list, but empty
[]
[]

代码的第一部分: letters = original 意味着两个变量都引用相同的列表。

第二部分: letters = [] 显示两个变量现在引用不同的列表。

第三部分: letters = original; letters[:] = [] letters = original; letters[:] = [] 开头是两个变量再次引用同一列表,但随后列表本身被修改(使用 [:] ),并且两个变量仍引用相同但已修改的列表。





python-3.x