var should definitely not be shared as long as you access it by
self.var. With the list however, what your statement does is when the class gets evaluated, one list instance is created and bound to the class dict, hence all instances will have the same list. Whenever you set
instance.list = somethingelse resp.
self.list = somethingelse, it should get an instance level value.
>>> class A(): ... var = 0 ... list =  ... >>> a = A() >>> b = A() >>> a.var 0 >>> a.list  >>> b.var 0 >>> b.list  >>> a.var = 1 >>> b.var 0 >>> a.list.append('hello') >>> b.list ['hello'] >>> b.list = ['newlist'] >>> a.list ['hello'] >>> b.list ['newlist']