Below is the documented way to create a mutable non-static class variable in python.
class Cla:
    def __init__(self):
        self.arr = []
    def showIds(self):
        print(str(id(self.arr)))
    def show(self):
        print(self.arr)
a = Cla()
b = Cla()
a.showIds()
b.showIds()
a.arr.append(10)
b.arr.append(20)
a.show()
b.show()
And it works (Sample output ...)
140174126200712
140174126185032
[10]
[20]
However, to accept some arguments while creating, I modified the __init__ to below. (Only change is in the __init__ function.
class Cla:
    def __init__(self, arr=[]):
        self.arr = arr
    def showIds(self):
        print(str(id(self.arr)))
    def show(self):
        print(self.arr)
a = Cla()
b = Cla()
a.showIds()
b.showIds()
a.arr.append(10)
b.arr.append(20)
a.show()
b.show()
And suddenly the list becomes shared.
140711339502152
140711339502152
[10, 20]
[10, 20]
My question is why? What is wrong with above approach.
PS: I have gone through below already.