python 字典数组 append疑惑 为什么创建的字典被append到数组之后 修改这个字典直接影响了数组 20

names=[]defsearchAll(filePath=os.getcwd()):x={'old':'dummy'}foriinrange(0,2):print'0x... names=[]def searchAll(filePath=os.getcwd()): x={'old':'dummy'} for i in range(0,2): print '0x01',names x['old']=i print '0x02',names names.append(x) print '0x03',names if __name__ == '__main__': searchAll() #renameAll()
上面的代码我期望得到的是
[{'old': 0}, {'old': 1}]
可总是用新的1 覆盖前面的0
好郁闷啊
展开
 我来答
可靠的我心我在
2016-06-30 · TA获得超过2157个赞
知道小有建树答主
回答量:784
采纳率:77%
帮助的人:627万
展开全部
import os
names=[]
def searchAll(filePath=os.getcwd()):
    #x={'old':'dummy'} 把这里移到for 里面
    for i in range(0,2):
        x={'old':'dummy'}#移到这里
        print '0x01',names
        x['old']=i
        print '0x02',names
        names.append(x)
    print '0x03',names

if __name__ == '__main__':
    searchAll()
    
#解释一哈 因为names=[{'old': 0}]的时候 x={'old': 0},这个时候循环到1 这个时候你改变
x['old']=1 那么names=[{'old': 0}]里面的 {'old': 0}==》{'old': 1} ,
names里面的{'old': 0} 和x 指向同一内存地址 一边都变
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式