kory
kory

Reputation: 512

Python dictionaries changing values in other dictionaries, bug?

I'm getting output that I'm not expecting with this code:

class Band:
    zones = {}
class Zone:
    count = 0

global_zones = {}

global_zones[1] = Band()
global_zones[2] = Band()
global_zones[1].zones[3302] = Zone()
global_zones[2].zones[3302] = Zone()

print('b4 1/3302',global_zones[1].zones[3302].count)
print('b4 2/3302',global_zones[2].zones[3302].count)

global_zones[1].zones[3302].count += 1

print('af 1/3302',global_zones[1].zones[3302].count)
print('af 2/3302',global_zones[2].zones[3302].count)

Output:

b4 1/3302 0
b4 2/3302 0
af 1/3302 1
af 2/3302 1

Expected Output:

b4 1/3302 0
b4 2/3302 0
af 1/3302 1
af 2/3302 0

Why is this happening? Thanks!

Upvotes: 1

Views: 50

Answers (1)

kory
kory

Reputation: 512

class Band:
    def __init__(self):
        self.zones = {}
class Zone:
    def __init__(self):
        self.count = 0

global_zones = {}

global_zones[1] = Band()
global_zones[2] = Band()
global_zones[1].zones[3302] = Zone()
global_zones[2].zones[3302] = Zone()

print('b4 1/3302',global_zones[1].zones[3302].count)
print('b4 2/3302',global_zones[2].zones[3302].count)

global_zones[1].zones[3302].count += 1

print('af 1/3302',global_zones[1].zones[3302].count)
print('af 2/3302',global_zones[2].zones[3302].count)

Thanks to @Barmar for the suggestion in the comments.

Upvotes: 2

Related Questions