I'm trying to understand an estrange behavior in Python.
I have the next python code:
class IntContainer:
listOfInts = []
def __init__(self, initListOfInts):
for i in initListOfInts:
self.listOfInts.append(i)
def printInts(self):
print self.listOfInts
if __name__ == "__main__":
intsGroup1 = [1,2,3,4]
intsGroup2 = [4,5,6,7]
intsGroups = [intsGroup1,intsGroup2]
intsContainers = []
for ig in intsGroups:
newIntContainer = IntContainer(ig)
intsContainers.append(newIntContainer)
for ic in intsContainers:
print ic.listOfInts
I expect to get something like:
[1, 2, 3, 4]
[4, 5, 6, 7]
But i get:
[1, 2, 3, 4, 4, 5, 6, 7]
[1, 2, 3, 4, 4, 5, 6, 7]
I have check the next question:
why is python reusing a class instance inside in function
And a lot of Python reference, but I can not understand what is happening. I think is related with the newIntContainer
identifier reutilization, but I do not understand it deeply.
Why Python appears to reused the last reference for the new object, even if I have added it to a permanent list? What can I do to resolve this behavior?
Thanks ;)
Since you made listOfInts
a class variable, that's what self.listOfInts
is accessing, whatever self
instance it may be; so, all the append
s are going to the same list.
If that's not what you want, you need to make listOfInts
an instance variable, for example by assigning self.listOfInts = []
at the start of the __init__
method.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With