【问题标题】:How can I clone an array to have alternative true and false fields?如何克隆数组以具有替代的真假字段?
【发布时间】:2020-01-05 17:13:10
【问题描述】:

我无法理解 Python 如何处理变量和列表 - 我想将一个 50 个元素的数组克隆为一个 100 个元素的数组,但要让每个元素后跟一个具有相同值和字段的元素,但是True 而不是 False 一个字段。

global A
A = list()

for i in range(100):
    A.append(0)

index = 0

for i in range(50):
    A[index] = self.b[i]
    A[index + 1] = self.b[i]
    print ("It was " + str(A[index].f)) # always prints False
    print ("It was " + str(A[index + 1].f)) # always prints False
    A[index].f = False # pointless, but just making sure in my insanity 
    A[index + 1].f = True
    print ("This should be false: " + str(A[index].f)) # always prints True 
    print ("This should be true: " + str(A[index+1].f)) # always prints True as well 

【问题讨论】:

  • 什么是self.b
  • 这是一个传递给我的文件的列表 它包含我想要的 A 的值,具有完全相同的字段(相同的对象)
  • @EricSpataru 但是what的列表呢?这一点对您的问题至关重要,因为您要问的是克隆。复制用户定义的对象并不总是那么简单。
  • 复制一个用户定义的对象更精确...我在一个单独的类中定义了整个东西。

标签: python list memory


【解决方案1】:

列表只保存对对象的引用;如果你这样做了

    A[index] = self.b[i]
    A[index + 1] = self.b[i]

然后变异 A[index]A[index + 1]self.b[i] 将全部变异同一个对象。

使用deepcopy,即

    A[index] = self.b[i]
    A[index + 1] = copy.deepcopy(self.b[i])

将为您留下另一个索引的单独副本。

【讨论】:

  • 有没有办法在没有导入的情况下完成这个(这需要import copy)?
  • 为什么要避免导入内置模块?
  • 这是我的作业所要求的 - 然而,这甚至与我的原始代码不接近,但我编写了一个示例以更好地了解可变对象在 Python 中的工作原理
  • 那你就需要实现自己的复制功能了。
  • 根据你的班级,它可能很简单(请原谅缺少缩进)def copy(self): return self.__class__(a=self.a, b=self.b)
猜你喜欢
  • 2012-10-09
  • 2016-11-17
  • 2018-01-16
  • 1970-01-01
  • 2022-06-10
  • 2011-03-13
  • 1970-01-01
  • 1970-01-01
  • 2014-12-20
相关资源
最近更新 更多