Python清除列表清除错误列表?

Python清除列表清除错误列表?,python,list,Python,List,因此,我对python有了非常初步的了解(为期10周的暑期课程由python和Matlab两部分组成)。我正在尝试创建一个二维列表,如下所示: data.append(示例) data.append(匹配项) 数据\u list.append(数据) data.clear() 它在for循环中运行,并在每次迭代时写入。但是,当我运行它并打印(数据列表)时,我得到一个空列表 我已经成功地这样运行了它: data.append(示例) data.append(匹配项) 数据\u list.appe

因此,我对python有了非常初步的了解(为期10周的暑期课程由python和Matlab两部分组成)。我正在尝试创建一个二维列表,如下所示:

data.append(示例)
data.append(匹配项)
数据\u list.append(数据)
data.clear()
它在for循环中运行,并在每次迭代时写入。但是,当我运行它并打印(数据列表)时,我得到一个空列表

我已经成功地这样运行了它:

data.append(示例)
data.append(匹配项)
数据\u list.append(数据)
数据=[]

但是我不明白我的两个方法之间的区别,以及为什么只有第二个方法有效…

在Python中,理解一切都是对象是至关重要的。其中,您有两种类型:

  • 不可变(int、float、char、str、tuple)
  • 可变(列表、目录、其他对象等)
不可变的对象无法更改。也就是说,不能重新定义不可变的:

1 = 0
那太可笑了!但是,您可以将不可变绑定到名称。我们称这些名称为“变量”

Mutable但是,对象可能会更改其内部内容:

x = [0, 2]
y = x
x[0] = 1

# x = [1, 2]
# y = [1, 2]
请注意,
y
只是列表中的一个名称。当您使用
x[0]=1
对列表
x
进行变异时,您正在变异绑定到
y
的同一列表


我为什么要告诉你这些?因为:

data.clear()
改变
数据绑定到的原始列表

相比之下

data = ()

只需
数据重新绑定到其他对象。

在Python中,理解一切都是对象是至关重要的。其中,您有两种类型:

  • 不可变(int、float、char、str、tuple)
  • 可变(列表、目录、其他对象等)
不可变的对象无法更改。也就是说,不能重新定义不可变的:

1 = 0
那太可笑了!但是,您可以将不可变绑定到名称。我们称这些名称为“变量”

Mutable但是,对象可能会更改其内部内容:

x = [0, 2]
y = x
x[0] = 1

# x = [1, 2]
# y = [1, 2]
请注意,
y
只是列表中的一个名称。当您使用
x[0]=1
对列表
x
进行变异时,您正在变异绑定到
y
的同一列表


我为什么要告诉你这些?因为:

data.clear()
改变
数据绑定到的原始列表

相比之下

data = ()

只需
数据重新绑定到另一个对象。

可能重复的
样本和
匹配的
数据列表。追加(data.copy())
将解决您的问题。问题是您在
数据列表
中放置了对
数据的引用,而不是
数据
中的内容。因此,当您清除
data
时,
data\u list
中的引用现在指向一个空列表。
samples
matches
是整数值。这是一个将你的生日与随机样本组进行比较的程序。因此我理解
data\u list.append(data.copy())
是如何解决这个问题的。奇怪的是,python的处理方式有所不同,因为通过
data=()
清除数据会保留数据列表中的值,而通过
清除则会保留数据。清除
不会保留数据。可能会重复
示例和
匹配的
数据列表。追加(data.copy())
将解决您的问题。问题是您在
数据列表
中放置了对
数据的引用,而不是
数据
中的内容。因此,当您清除
data
时,
data\u list
中的引用现在指向一个空列表。
samples
matches
是整数值。这是一个将你的生日与随机样本组进行比较的程序。因此我理解
data\u list.append(data.copy())
是如何解决这个问题的。奇怪的是,python的处理方式有所不同,因为通过
data=()
清除数据,is会保留数据列表中的值,而通过
清除则不会保留数据。