引用列表中的元素

时间:2016-09-07 20:37:28

标签: python random

考虑到以下两个例子,我对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的内容没有改变。这是为什么?

1 个答案:

答案 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绑定的对象的方法的语法糖。

然后,区别在于,在第一种情况下,它不仅将名称首先绑定到一个对象,然后绑定到另一个对象。它将名称绑定到列表,然后使用此名称间接调用列表的方法。