考虑到以下两个例子,我对python如何处理列表中的元素有点困惑:
第一个例子:
import random
a = [[1,2],[3,4],[5,6],[7,8]]
b = [0.1,0.2]
c = random.choice(a)
c[:] = b
print(a)
第二个例子:
import random
a = [1, 2, 3, 4, 5, 6, 7, 8]
b = 0.1
c = random.choice(a)
c = b
print(a)
在第一个例子中,列表a中的内容被改变;而在第二个例子中,列表a的内容没有改变。这是为什么?
答案 0 :(得分:3)
让我们从第二种情况开始。你写了
c = random.choice(a)
所以名称c
绑定到a的某个元素,然后
c = b
所以名称c
绑定到某个其他对象(名称为b
的对象 - 浮点数0.1)。
现在是第一个案例。你从
开始c = random.choice(a)
因此名称c
绑定到a
中的对象,这是一个列表本身。然后你写
c[:] = b
表示通过其他列表替换名称c
绑定的列表中的所有项目。实际上,这被称为this,并且基本上是用于调用c
绑定的对象的方法的语法糖。
然后,区别在于,在第一种情况下,它不仅将名称首先绑定到一个对象,然后绑定到另一个对象。它将名称绑定到列表,然后使用此名称间接调用列表的方法。