所以我对python有一个非常基本的理解(为期10周的夏季课程,由python和Matlab分开)。我正在尝试创建一个二维列表,如下所示:
data.append (samples)
data.append (matches)
data_list.append (data)
data.clear()
这在for循环中运行,每次迭代时写入。但是,当我运行它并print(data_list)
时,我得到一个空列表。
我已经成功地像这样运行了:
data.append (samples)
data.append (matches)
data_list.append (data)
data = []
但是我不明白我的两种方法之间的区别,以及为什么只有第二种方法可行...
答案 0 :(得分:5)
在Python中,了解一切都是对象至关重要。其中,您有两种类型:
不可变对象无法更改。也就是说,您无法重新定义不可变的内容:
1 = 0
那太荒谬了!但是,您可以将不可变项 bind 绑定到名称。我们称此类名称为“变量”。
x = 1
y = x
x = 0
# x = 0
# y = 1
可变对象可能会更改其内部内容:
x = [0, 2]
y = x
x[0] = 1
# x = [1, 2]
# y = [1, 2]
请注意,y
只是列表的名称。当您将列表x
更改为x[0] = 1
时,就是在更改与y
绑定的同一列表。
为什么我要告诉你这一切?因为:
data.clear()
变异与data
绑定的原始列表。
相反,
data = ()
只需重新绑定 data
到其他对象。