Adicionar nova chave ao dicionário substitui todas as chaves armazenadas anteriormente por novos valores de chave

Estou tentando usar um loop for para gerar valores aleatórios para preços de itens, alterando o valor dos preços de itens em um dicionário predefinido.

Os novos valores desse dicionário predefinido são adicionados ao final de outro dicionário predefinido para que um histórico de preços possa ser armazenado.

aqui está o meu código:

tradable_good_prices= {'iron' : 0, 'gold' : 0, 'lead' : 0, 'ruby' : 0 'emerald' : 0, 'steel' : 0, 'diamond' : 0} 
item_list = tradable_good_prices.keys() 
item_price_history = {}

def Random_economy(generations):

    for generation_number in range(0, generations): 

        for list_number in range(0, len(item_list)): 

            tradable_good_prices[item_list[list_number]] = np.random.random_integers(100,1000) 

        print(tradable_good_prices)

        item_price_history[generation_number] = tradable_good_prices 

        print(item_price_history)

Random_economy(2)

o código leva gerações como argumento para o número de iterações de loop for. E usando um valor de 2 por gerações, essa saída é produzida no console:

{'steel': 821, 'diamond': 477, 'lead': 325, 'gold': 914, 'iron': 542, 'emerald': 360, 'ruby': 705}

{0: {'steel': 821, 'diamond': 477, 'lead': 325, 'gold': 914, 'iron': 542, 'emerald': 360, 'ruby': 705}}

{'steel': 751, 'diamond': 158, 'lead': 322, 'gold': 662, 'iron': 180, 'emerald': 846, 'ruby': 570}

{0: {'steel': 751, 'diamond': 158, 'lead': 322, 'gold': 662, 'iron': 180, 'emerald': 846, 'ruby': 570}, 1: {'steel': 751, 'diamond': 158, 'lead': 322, 'gold': 662, 'iron': 180, 'emerald': 846, 'ruby': 570}}

Como pode ser visto, os valores anteriores estão sendo substituídos, acho que há uma explicação bastante simples para isso, como "o dicionário que armazena os diferentes valores de geração está referenciando o primeiro para seus valores", mas não consigo encontrar ajuda sobre esse assunto em nenhum lugar.

Alguém poderia me explicar o que estou fazendo de errado.

questionAnswers(1)

yourAnswerToTheQuestion