Python:新对象丢失数组属性

2024-06-16 14:47:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在编写一个python程序,该程序应该创建一个类对象数组,这是a创建的

我面临的问题是,这个类有一个数组作为属性。执行myArray.clear()之后,类对象将丢失数组值。其他值不会丢失。我知道这是由于数组的引用造成的,但我不知道如何修复它

代码示例:

课程

class Testclass(object):
   def __init__(self, array, normalValue):
    self._array= array
    self._normalValue= normalValue
    

Main

if __name__=="main":
   exampleIteratorArray = ["Ex1", "Ex2", "Ex3"]
   objectArray = []
   for i, value in enumerate(exampleIteratorArray):
         exampleArray = [i, i+1, i+2]
         objectArray.append(Testclass(exampleArray, value))
         exampleArray.clear()              #I have to do this because I want to check the state depending on the value of this variable (in my main code)
                                            #After the exampleArray.clear(), the objectArray loses the exampleArray values but not the i value

因此,我想知道如何将对象添加到数组中,而不会在每次迭代后丢失值。 提前感谢!:)

编辑

正如Azro所指出的,每次迭代我都会从exampleArray创建一个新变量,因为我不需要清除数组


Tags: the对象inself程序valuemain数组
1条回答
网友
1楼 · 发布于 2024-06-16 14:47:43

在Python中,列表分配引用列表的相同(原始)实例。清除本地数组时,您同时清除了本地数组和您认为复制到对象中的数组(但实际上没有),因为它们实际上是同一个数组

简单的例子:

a = [1, 2, 3]
b = a
a.append(4)
print(b)
# prints [1, 2, 3, 4]

要将数组作为单独的对象分配/复制,需要使用复制或深度复制操作。当前代码中的一种简单方法是复制一个片段:

objectArray.append(Testclass(exampleArray[:], value))

请注意添加的[:]

相关问题 更多 >