当一个对象用于从不同的类创建另一个对象时,作为参数传递的数组似乎实际上在两个类之间共享。整数不会表现出这种行为。我不知道如何进一步解释,希望代码能说明问题。这种行为是有意为之的吗?如果是的话,如何才能使阵列分离
class foo:
def __init__(self, array, integer):
self.list = array
self.list[0] = self.list[0] + 1
self.number = integer
self.number = self.number + 1
print('list: ' + str(self.list[0]))
print('number: ' + str(self.number))
class bar:
def __init__(self):
self.objects = []
self.defaultarray = [1]
self.defaultnumber = 1
for i in range(0,3):
print('default list: ' + str(self.defaultarray))
self.objects.append(foo(self.defaultarray, self.defaultnumber))
item = bar()
#expected result:
#default list: [1]
#list: 2, number: 2
#default list: [1]
#list: 2, number: 2
#default list: [1]
#list: 2, number: 2
#actual result:
#default list: [1]
#list: 2, number: 2
#default list: [2]
#list: 3, number: 2
#default list: [3]
#list: 4, number: 2
实际上我并没有意识到这种行为,但据我所知,Python在实例化时是通过引用而不是通过值来传递数组的。这意味着,从您的代码示例中可以看出,您将从两个对象中变异数组
如果严格希望传递数组的副本,而不是让两个对象都对其进行变异,则可以使用:
如果您熟悉C,可以考虑Python将数组的地址传递给对象。这两个对象引用相同的地址,因此都对相同的数组进行变异。我希望这有助于减轻一些关于这里到底发生了什么的神秘感
相关问题 更多 >
编程相关推荐