关于Python中深拷贝与浅拷贝的理解(二)---排bug
2015-11-10 21:05
971 查看
上一篇中介绍了Python中深拷贝与浅拷贝的区别。既然明白了bug所在,talk is cheap,开撸。
既然是输入数据遭到了修改,那第一思路是将所有出现引用输入数据的地方均加上copy.deepcopy(),使每次在计算时数据可以随便改动,但原始数据保持不变。
但作为一个强迫症来讲,每个地方的引用都加上深拷贝,这对空间和时间的消耗肯定都有增加(虽然对于我的小软件并没有什么明显的区别),所以,必须得找真正改动原始数据的地方,再用深拷贝!
其实这也没什么,无非是看看构造的ui类中的函数有没有修改原始数据的地方,以及引用的函数文件中的函数有没有改变原始数据的地方。
其实代码只有两千多行(小软件……),但是还是检查了一天。。这里为了试验Pandas和Numpy的数据何时会产生变化,还在控制台试了几组数据,粘贴于此:
l
总体来讲“
用concat会生成一个全新的对象,对原有的数据并没有引用
DataFrame直接加上一个数字(经过运算),也得到全新的对象
用DataFrame的values属性对一个对象进行赋值,数据会引用,不是深拷贝
从数组中取出一个数,对其进行改变,并不影响原数组
对深拷贝和浅拷贝的情况有了一个大体上的了解,有时间进行深入的学习。
但是!
!
!
我在改到后面的代码时,忽然测试到前面仍有类似的问题没有改掉!
一行一行看代码改,这种方法效率太低下了!准确率还不能保证!
必须要找一个简单的测试方法,可以监视每次操作软件时,各数据有没有改动,这部分下篇博客进行介绍。
既然是输入数据遭到了修改,那第一思路是将所有出现引用输入数据的地方均加上copy.deepcopy(),使每次在计算时数据可以随便改动,但原始数据保持不变。
但作为一个强迫症来讲,每个地方的引用都加上深拷贝,这对空间和时间的消耗肯定都有增加(虽然对于我的小软件并没有什么明显的区别),所以,必须得找真正改动原始数据的地方,再用深拷贝!
其实这也没什么,无非是看看构造的ui类中的函数有没有修改原始数据的地方,以及引用的函数文件中的函数有没有改变原始数据的地方。
其实代码只有两千多行(小软件……),但是还是检查了一天。。这里为了试验Pandas和Numpy的数据何时会产生变化,还在控制台试了几组数据,粘贴于此:
l
总体来讲“
用concat会生成一个全新的对象,对原有的数据并没有引用
DataFrame直接加上一个数字(经过运算),也得到全新的对象
用DataFrame的values属性对一个对象进行赋值,数据会引用,不是深拷贝
从数组中取出一个数,对其进行改变,并不影响原数组
对深拷贝和浅拷贝的情况有了一个大体上的了解,有时间进行深入的学习。
但是!
!
!
我在改到后面的代码时,忽然测试到前面仍有类似的问题没有改掉!
一行一行看代码改,这种方法效率太低下了!准确率还不能保证!
必须要找一个简单的测试方法,可以监视每次操作软件时,各数据有没有改动,这部分下篇博客进行介绍。
相关文章推荐
- Python windows7 install gevent
- Python调用C程序
- wxPython笔记(Getting started with wxPython 1)
- 关于Python中深拷贝与浅拷贝的理解(一)---概念
- python核心编程:repr()与str()的区别
- Python 之简单线程池创建
- python表达式操作符与数学函数
- python的模块
- python: 使用matplotlib的pyplot绘制图表
- LeetCode----Remove Duplicates from Sorted Array
- Python单元测试框架-unittest
- perl和python各自擅长什么领域?
- [LeetCode]题解(python):050-Pow(x, n)
- Python: sort,sorted,OrderedDict的用法
- python implement for selected problems
- [LeetCode]题解(python):049-Group Anagrams
- python基础-内置数据类型
- Python基础教程100例 练习2
- 基于Python的DBLP数据库爬虫系统
- Python字符串的encode与decode研究心得乱码问题解决方法