With the following code: import csv
class AccessPoint(object): def __init__(self, name, ipv4, model, location): self.name = name self.ipv4 = ipv4 self.model = model self.location = location print('{0} born'.format(self.name)) def __del__(self): print('{0} died'.format(self.name)) def main(): ap_list = [] ap_dict = {} with open('C:\\inventory.csv', 'r') as csvfile: csv_reader = csv.DictReader(csvfile) for row in csv_reader: ap = AccessPoint(row['Host Name'], row['Static IP Address'], row['Device Model'], row['Host Name'][0:5]) ap_dict['ap_name'] = ap.name ap_dict['ap_ipv4'] = ap.ipv4 ap_dict['ap_model'] = ap.model ap_dict['ap_location'] = ap.location ap_list.append(ap_dict) print(ap_list) if __name__ == '__main__': main() When I execute print(ap_list) I get the very last row in the CSV repeated once for every row in the file. I would expect to see a list of ap_dicts, but I do not. When I add print(ap_dict) directly after the ap_list.append(ap_dict) inside the loop I see the correct values. Why is it that the print(ap_list) that happens outside of the for loop is only printing the last item on repeat? Here is some example output data: AP1 born AP2 born AP1 died AP3 born AP2 died [{'ap_name': 'AP3', 'ap_ipv4': '192.168.1.1', 'ap_model': 'Linksys', 'ap_location': 'HQ'}, {'ap_name': 'AP3', 'ap_ipv4': '192.168.1.1', 'ap_model': 'Linksys', 'ap_location': 'HQ'}, {'ap_name': 'AP3', 'ap_ipv4': '192.168.1.1', 'ap_model': 'Linksys', 'ap_location': 'HQ'} AP3 died Thanks in advance. -- https://mail.python.org/mailman/listinfo/python-list