Pythonで継承しても親のリストは別物にならない

バージョン

python 3.10.6

概要

プログラム

###
#こんなようなクラスがある
class Base:
    x = 0
    ary1 = [0,0]
    ary2 = []
class Hasei1(Base):
    ary3 = []
class Hasei2(Base):
    ary3 = []

###
#宣言
b = Base()
h1 = Hasei1()
h2 = Hasei2()

###
#変更
h1.x = 3
h1.ary1[0] = 3
h1.ary2.append(3)
h1.ary3.append(30)

###
#表示
print(b.x)     #期待値: 0
print(h1.x)    #期待値: 3
print(h2.x)    #期待値: 0
print(b.ary1)  #期待値: [0,0]
print(h1.ary1) #期待値: [3,0]
print(h2.ary1) #期待値: [0,0]
print(b.ary2)  #期待値: []
print(h1.ary2) #期待値: [3]
print(h2.ary2) #期待値: []
print(h1.ary3) #期待値: [30]
print(h2.ary3) #期待値: []

結果

0
3
0
[3, 0]
[3, 0]
[3, 0]
[3]
[3]
[3]
[30]
[]

なんでやねん

対処

親クラスのコンストラクタかなんかで明示的にリストを代入する必要がある
子クラスで再代入しても別物になる

#たぶん簡単な対処の例
class Base:
    x = 0
    def __init__(self) -> None:
        self.ary1 = [0,0]
        self.ary2 = []
class Hasei1(Base):
    ary3 = []
class Hasei2(Base):
    ary3 = []

これで期待値通りのものがでてくるようになる
詳しい理由は知らないが、新しいインスタンスには既存の値を代入が基本動作なんだろうと適当に片を付けておく