python赋值问题

#!/usr/bin/python
# -*-coding:utf-8 -*-
import random
class demo(object):
    def __init__(self):
        self.arr1 = []
        self.demo_list = ['第一个','第二个']
        self.arrfwPlaintiff = {"fwName": "", "fwAddress": "", "fwCardId": "", "fwPhone": "", "fwLitigantType2": ""}
    def arr(self):

        for i in range(2):
            self.arr1.append(self.arrfwPlaintiff)
            #self.arr1.append({"fwName": "", "fwAddress": "", "fwCardId": "", "fwPhone": "", "fwLitigantType2": ""})

        return self.arr1

    def getValue(self):
        self.arr()
        for key,val in enumerate(self.arr1):
            self.arr1[key]['fwName']  = self.demo_list[key]
            self.arr1[key]['fwLitigantType2'] = key
        print(self.arr1)

if __name__ == '__main__':

    demo().getValue()

为什么使用
self.arr1.append(self.arrfwPlaintiff) 两个'fwName': 的值都是 self.demo_list 的 '第二个',
结果错误:
[{'fwName': '第二个', 'fwAddress': '', 'fwCardId': '', 'fwPhone': '', 'fwLitigantType2': 1}, {'fwName': '第二个', 'fwAddress': '', 'fwCardId': '', 'fwPhone': '', 'fwLitigantType2': 1}]

而写死的
self.arr1.append({"fwName": "", "fwAddress": "", "fwCardId": "", "fwPhone": "", "fwLitigantType2": ""})
结果正确:
[{'fwName': '第一个', 'fwAddress': '', 'fwCardId': '', 'fwPhone': '', 'fwLitigantType2': 0}, {'fwName': '第二个', 'fwAddress': '', 'fwCardId': '', 'fwPhone': '', 'fwLitigantType2': 1}]

因为self.arr1.append(self.arrfwPlaintiff)的self.arrfwPlaintiff为同一个对象(地址相同),仅保留最后一次的修改结果

这里面的是有一点,用代码里面话术说,跟深拷贝和浅拷贝有关系,你这个添加的就是同一个变量,索引位置都没变,所以后面更改的时候会一起更改,因为两者的位置都是一样的,你写死是因为,再次循环后位置发生改变了,是完全不同的对象,所以第二次更改不会把前面的变了,可以百度搜下深拷贝和浅拷贝的关系,如果不想写死,两种方法,把self.arrfwPlaintiff这个写到for循环里面,这样就可以了,第二种,使用deepcopy深拷贝复制一个放入for循环,也可以