Take this as a an example:
class Lizard(object):
dict_class_var = {"first": "jon", "last": "do"}
string_class_var = "monkey"
def test():
liz1 = Lizard()
liz1.dict_class_var['first'] = "david"
liz1.string_class_var = "lion"
print "dict: {}".format(liz1.dict_class_var)
print "str: {}".format(liz1.string_class_var)
liz2 = Lizard()
print "dict: {}".format(liz2.dict_class_var)
print "str: {}".format(liz2.string_class_var)
liz3 = Lizard()
print "dict: {}".format(liz3.dict_class_var)
print "str: {}".format(liz3.string_class_var)
The Lizard
class has two class-level attributes. In test
, I'm initializing 3 variables with Lizard()
and I'm expecting that all of them point to same dict_class_var
and string_class_var
which I have updated with liz1
but this is the output:
dict: {'last': 'do', 'first': 'david'}
str: lion
dict: {'last': 'do', 'first': 'david'}
str: monkey
dict: {'last': 'do', 'first': 'david'}
str: monkey
Why the dict has been updated for all of them but the string has not?