python 字典对象赋值之deepcopy遭遇的问题及解决过程(lxml惹的祸)

简介:
今天在写一段代码的时候,需要对字典进行传值操作。
一般情况下字典a = 字典b,意味着是传引用,b发送改变的情况下a也会发生改变。
我的字典如下
a={'testcase': {'attributes': {'classname': 'testdemo', 'circles': '2', 'casecode': 'case02', 'description': u'/u6d4b/u8bd5/u51c6/u590702'}, 'value': [{'step': {'attributes': {'stepid': '01', 'type': 'actor', 'method': 'prepareurl', 'description': u'/u51c6/u5907/u670d/u52a1/u5668/u5730/u5740'}, 'value': [{'inputdata': {'attributes': {'value': 'http://10.249.128.122:8180/top/ecs/DayOnlineTimes.do?', 'key': 'url'}, 'value': None}}]}}]}}
调用代码如下
import copy
copy.deepcopy(a)
结果在代码调试的时候老是报
'__cinit__() takes exactly 1 positional argument (0 given)
神奇的是如果单独启动个python,把a字典赋值然后调用copy.deepcopy(a)是正常的,但是如果在项目中使用就报如上错误
看着python的这个提示真是让人丈二和尚摸不着头脑,明明传了参数的为何报没有参数传递呢。如大家所知python报错机制比较乱的,往往把
子函数的错误在调度的地方直接抛出来。所以最后的办法,只能直接debug,还好copy模块的代码也是开源的,一行一行debug.
结果发现代码中有个地方如下:
cls = type(x)
而x是我传入字典的子对象{'classname': 'testdemo', 'circles': '2', 'casecode': 'case02', 'description': u'/u6d4b/u8bd5/u51c6/u590702'}
按道理这个对象也应该是dict
结果打印是<type 'lxml.etree._Attrib'>
这时候我大致明白了,原来我系统中引用了lxml库。
所以type(x)的时候就找到这个类,而copy模块里边没有针对这种对象的处理。
最后代码修改如下
158 cls = type(x)
159 if cls == lxml.etree._Attrib:
160 cls = dict


本文转自elbertchen 51CTO博客,原文链接:http://blog.51cto.com/linkyou/751804,如需转载请自行联系原作者
相关文章
|
2月前
|
存储 JavaScript Java
(Python基础)新时代语言!一起学习Python吧!(四):dict字典和set类型;切片类型、列表生成式;map和reduce迭代器;filter过滤函数、sorted排序函数;lambda函数
dict字典 Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。 我们可以通过声明JS对象一样的方式声明dict
170 1
|
3月前
|
安全 大数据 程序员
Python operator模块的methodcaller:一行代码搞定对象方法调用的黑科技
`operator.methodcaller`是Python中处理对象方法调用的高效工具,替代冗长Lambda,提升代码可读性与性能。适用于数据过滤、排序、转换等场景,支持参数传递与链式调用,是函数式编程的隐藏利器。
119 4
|
3月前
|
存储 JSON 数据管理
Python字典:高效数据管理的瑞士军刀
Python字典基于哈希表实现,提供接近O(1)的高效查找,支持增删改查、遍历、合并等丰富操作,广泛应用于计数、缓存、配置管理及JSON处理。其灵活性与性能使其成为数据处理的核心工具。
469 0
|
4月前
|
安全 JavaScript Java
Python中None与NoneType的真相:从单例对象到类型系统的深度解析
本文通过10个真实场景,深入解析Python中表示“空值”的None与NoneType。从单例模式、函数返回值,到类型注解、性能优化,全面揭示None在语言设计与实际编程中的核心作用,帮助开发者正确高效地处理“无值”状态,写出更健壮、清晰的Python代码。
400 3
|
3月前
|
存储 缓存 安全
Python字典:从入门到精通的实用指南
Python字典如瑞士军刀般强大,以键值对实现高效数据存储与查找,广泛应用于配置管理、缓存、统计等场景。本文详解字典基础、进阶技巧、实战应用与常见陷阱,助你掌握这一核心数据结构,写出更高效、优雅的Python代码。
88 0
|
4月前
|
Python
解决Python中AttributeError:'image'对象缺少属性'read_file'的问题策略。
通过上述策略综合考虑,您将能够定位问题并确定如何解决它。记住,Python社区很庞大,也很乐于帮助解决问题,因此不要害怕在求助时提供尽可能多的上下文和您已经尝试过的解决方案。
128 0
|
8月前
|
Python
解决Python报错:DataFrame对象没有concat属性的多种方法(解决方案汇总)
总的来说,解决“DataFrame对象没有concat属性”的错误的关键是理解concat函数应该如何正确使用,以及Pandas库提供了哪些其他的数据连接方法。希望这些方法能帮助你解决问题。记住,编程就像是解谜游戏,每一个错误都是一个谜题,解决它们需要耐心和细心。
375 15
|
8月前
|
安全 测试技术 开发者
Python中的“空”:对象的判断与比较
在Python开发中,判断对象是否为“空”是常见操作,但其中暗藏诸多细节与误区。本文系统梳理了Python中“空”的判定逻辑,涵盖None类型、空容器、零值及自定义对象的“假值”状态,并对比不同判定方法的适用场景与性能。通过解析常见误区(如混用`==`和`is`、误判合法值等)及进阶技巧(类型安全检查、自定义对象逻辑、抽象基类兼容性等),帮助开发者准确区分各类“空”值,避免逻辑错误,同时优化代码性能与健壮性。掌握这些内容,能让开发者更深刻理解Python的对象模型与业务语义交集,从而选择最适合的判定策略。
261 5
|
8月前
|
人工智能 Python
[oeasy]python083_类_对象_成员方法_method_函数_function_isinstance
本文介绍了Python中类、对象、成员方法及函数的概念。通过超市商品分类的例子,形象地解释了“类型”的概念,如整型(int)和字符串(str)是两种不同的数据类型。整型对象支持数字求和,字符串对象支持拼接。使用`isinstance`函数可以判断对象是否属于特定类型,例如判断变量是否为整型。此外,还探讨了面向对象编程(OOP)与面向过程编程的区别,并简要介绍了`type`和`help`函数的用法。最后总结指出,不同类型的对象有不同的运算和方法,如字符串有`find`和`index`方法,而整型没有。更多内容可参考文末提供的蓝桥、GitHub和Gitee链接。
204 11
|
开发者 Python
Python对象和类
Python对象和类
60 0

推荐镜像

更多