【问题标题】:Python clear list clearing wrong list?Python清除列表清除错误列表?
【发布时间】:2018-06-27 02:45:24
【问题描述】:

所以我对 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 = []

但我不明白我的两种方法之间的区别以及为什么只有第二种方法有效......

【问题讨论】:

  • 什么是samplesmatches
  • data_list.append(data.copy()) 将解决您的问题。问题是您在data_list 中引用了data,而不是data 中的内容。因此,当您清除 data 时,data_list 内部的引用现在指向一个空列表。
  • samplesmatches 是整数值。它是一个将您的生日与随机样本组进行比较的程序。所以我了解data_list.append(data.copy()) 是如何解决这个问题的。奇怪的是,python 处理的方式不同,因为通过 data=() 清除数据会保留 data_list 中的值,但通过 .clear 清除它不会保留数据。

标签: python list


【解决方案1】:

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

  • 不可变(int、float、char、str、tuple)
  • 可变(列表、字典、其他对象,...)

不可变对象无法更改。也就是说,你不能重新定义一个不可变的:

1 = 0

这太荒谬了!但是,您可以将不可变对象绑定到名称。我们称这些名称为“变量”。

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[0] = 1 改变列表 x 时,您正在改变 y 绑定到的同一个列表。


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

data.clear()

变异 data 绑定的原始列表。

相比之下,

data = ()

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-03
    • 1970-01-01
    • 2013-02-21
    • 1970-01-01
    相关资源
    最近更新 更多