浅谈python中字典append 到list 后值的改变问题

作者:katios 时间:2021-09-17 23:13:23 

看一个例子


d={'test':1}
d_test=d
d_test['test']=2
print d

如果你在命令行实践的话,会发现你改动的是d_test ,但是d 也跟着改变了。

通常这和我们期待的不一样。

Why?

因为字典d 是一个object ,而d_test=d并没有真正的将该字典在内存中再次创建。只是指向了相同的object。这也是python 提高性能,优化内存的考虑。

实际场景


d={"name":""}
l=[]
for i in xrange(5):
 d["name"]=i
 l.append(d)
print l

loop 后可能跟你想要的结果并不相同。

即使append到list 中,但是,list中存放的也是一个对象,或者说是字典的地址。而非内存中真正的存储空间。

使用 .copy()方法。可以创建一个新的独立的字典


d={"name":""}
l=[]
for i in xrange(5):
 test=d.copy()
 test["name"]=i
 l.append(test)
print l

更新:


a={'q':1,'w':[]}
b=a.copy()
b['q']=2
b['w'].append(123)
print a
print b

这个时候发现a中'q'的值不会变化但是其列表中的值还是发生了改变

因为copy是浅层次copy

但是这里有个track


a={'q':1,'w':[]}
b=a.copy()
b['q']=2
b['w']=[123]
print a
print b

直接赋值的话,则不会改变a中的结构(多半是append这个方法的关系)

深层次的copy


import copy
a={'q':1,'w':[]}
b=copy.deepcopy(a)

来源:https://blog.csdn.net/sinat_21302587/article/details/72356431

标签:python,list,append
0
投稿

猜你喜欢

  • SQL查询不重复记录/删除重复记录

    2008-11-18 16:08:00
  • 在python中list作函数形参,防止被实参修改的实现方法

    2022-11-15 19:27:25
  • MySQL数据库之UPDATE更新语句精解

    2009-03-20 15:21:00
  • 计划备份mysql数据库

    2009-03-09 14:34:00
  • ie和firefox中css自动换行实现方法

    2008-04-08 12:49:00
  • python实现简单的计算器功能

    2021-02-08 03:38:54
  • 详解字典树Trie结构及其Python代码实现

    2023-07-07 18:18:41
  • SQL Server连接中经常出现的3个常见错误与解答

    2010-07-26 14:25:00
  • Oracle批量查询、删除、更新使用BULK COLLECT提高效率

    2023-07-14 03:15:52
  • SQL语言基本语句介绍

    2008-07-24 13:32:00
  • Python连接es之es更新操作示例详解

    2022-11-21 06:11:48
  • ASP在线升级类文件源码

    2008-10-10 13:09:00
  • Windows8下安装Python的BeautifulSoup

    2022-05-30 15:03:06
  • 用Python制作检测Linux运行信息的工具的教程

    2022-03-01 17:49:15
  • Python的Bottle框架中返回静态文件和JSON对象的方法

    2023-11-07 20:14:41
  • Python常用内置函数的使用教程详解

    2021-11-11 21:23:50
  • python XlsxWriter模块创建aexcel表格的实例讲解

    2023-08-30 02:20:47
  • 详解Python连接oracle的问题记录与解决

    2021-04-07 09:38:41
  • 再谈动态添加样式规则

    2009-09-02 13:10:00
  • Python使用plotly绘制数据图表的方法

    2023-04-25 13:19:00
  • asp之家 网络编程 m.aspxhome.com