关于Python中深拷贝与浅拷贝的理解(二)---排bug

时间:2022-12-04 19:52:40

上一篇中介绍了Python中深拷贝与浅拷贝的区别。既然明白了bug所在,talk is cheap,开撸。

既然是输入数据遭到了修改,那第一思路是将所有出现引用输入数据的地方均加上copy.deepcopy(),使每次在计算时数据可以随便改动,但原始数据保持不变。

但作为一个强迫症来讲,每个地方的引用都加上深拷贝,这对空间和时间的消耗肯定都有增加(虽然对于我的小软件并没有什么明显的区别),所以,必须得找真正改动原始数据的地方,再用深拷贝!关于Python中深拷贝与浅拷贝的理解(二)---排bug

其实这也没什么,无非是看看构造的ui类中的函数有没有修改原始数据的地方,以及引用的函数文件中的函数有没有改变原始数据的地方。

其实代码只有两千多行(小软件……),但是还是检查了一天。。这里为了试验Pandas和Numpy的数据何时会产生变化,还在控制台试了几组数据,粘贴于此:

关于Python中深拷贝与浅拷贝的理解(二)---排bug关于Python中深拷贝与浅拷贝的理解(二)---排bug

关于Python中深拷贝与浅拷贝的理解(二)---排bug关于Python中深拷贝与浅拷贝的理解(二)---排bug关于Python中深拷贝与浅拷贝的理解(二)---排bugl


总体来讲“

  • 用concat会生成一个全新的对象,对原有的数据并没有引用
  • DataFrame直接加上一个数字(经过运算),也得到全新的对象
  • DataFrame的values属性对一个对象进行赋值,数据会引用,不是深拷贝
  • 从数组中取出一个数,对其进行改变,并不影响原数组
对深拷贝和浅拷贝的情况有了一个大体上的了解,有时间进行深入的学习。

但是!

我在改到后面的代码时,忽然测试到前面仍有类似的问题没有改掉!

一行一行看代码改,这种方法效率太低下了!准确率还不能保证!关于Python中深拷贝与浅拷贝的理解(二)---排bug

必须要找一个简单的测试方法,可以监视每次操作软件时,各数据有没有改动,这部分下篇博客进行介绍。