Цикл for не осуществляет перебор, что не так с кодом в python

Задача сформировать список словарей, однако цикл for не перебирает список в заданном диапазоне, а повторяет последнее сочетание ровно столько раз, сколько длина диапазона. Прошу строго не судить, делаю первые шаги в Python, вот код:

names = ['igor', 'dasha', 'martin', 'vladimir', 'rishat', 'maria', 'marat', 'petr', 'dima', 'polina', 'katya', 'elena']
ages = ['25', '24', '28', '26', '32', '45', '42', '54', '57', '41', '23', '27']
genders = ['male', 'female', 'male', 'male', 'male', 'female', 'male', 'male', 'male', 'female', 'female', 'female']

# определяем список для запаковки словарей
data = []

# создаем словарь имен с возрастом и полом
name_age_gender_dict = {}

# набиваем в цикле список словарями из списков имен с возрастом и полом
for i in range(len(names)):
    name_age_gender_dict['name'] = name[i]
    name_age_gender_dict['age'] = age[i]
    name_age_gender_dict['gender'] = gender[i]
    data.append(name_age_gender_dict)

     
     
print(f'''Словарь имен c возрастом и полом:{name_age_gender_dict}''')
print(f'\nСписок словарей:\n', data)

результат работы кода:

Словарь имен c возрастом и полом:{'name': 'elena', 'age': '27', 'gender': 'female'}

Список словарей:
 [{'name': 'elena', 'age': '27', 'gender': 'female'}, {'name': 'elena', 'age': '27', 'gender': 'female'}, {'name': 'elena', 'age': '27', 'gender': 'female'}, {'name': 'elena', 'age': '27', 'gender': 'female'}, {'name': 'elena', 'age': '27', 'gender': 'female'}, {'name': 'elena', 'age': '27', 'gender': 'female'}, {'name': 'elena', 'age': '27', 'gender': 'female'}, {'name': 'elena', 'age': '27', 'gender': 'female'}, {'name': 'elena', 'age': '27', 'gender': 'female'}, {'name': 'elena', 'age': '27', 'gender': 'female'}, {'name': 'elena', 'age': '27', 'gender': 'female'}, {'name': 'elena', 'age': '27', 'gender': 'female'}]

Ответы (1 шт):

Автор решения: CrazyElf

Вы добавляете в список ссылку на один и тот же словарь. Нужно создавать новый словарь на каждой итерации цикла. И вообще можно проще:

# набиваем в цикле список словарями из списков имен с возрастом и полом
for i in range(len(names)):
    name_age_gender_dict = {
        'name': names[i],
        'age': ages[i],
        'gender': genders[i],
    }
    data.append(name_age_gender_dict)

Вообще питонический способ работы с объектами - это не переиспользовать старые объекты, особенно коллекции, а стараться создавать новые объекты, особенно внутри циклов. Так меньше шансов нарваться на побочные эффекты, как это у вас получилось.

→ Ссылка