class variables is shared across all instances in python? [duplicate]

var should definitely not be shared as long as you access it by instance.var or 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.

Example time:

>>> 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']

These are basically like static variables in Java:

// Example equivalent Java
class A {
    static int var = 0;
    static String[] list;
}

This is the intended behavior: Class variables are for the class.

For normal instance variables, declare them in the constructor:

class A:
    def __init__(self):
        self.var = 0
        self.list = []

You may want to look at Static class variables in Python.