目录
•一、Python 一行代码实现 1 到 100 之和•二、drop,truncate,delete区别•三、Python中深拷贝和浅拷贝的区别是啥?
一、Python 一行代码实现 1 到 100 之和
使用 Python 的内置求和函数 sum,sum()
函数第一个参数接受可迭代的对象,如列表,字典等。
然后考虑使用 range()
,列表推导式生成1到100的数字列表:
print(sum([i for i in range(1,101)])
靠谱参考链接,复制到百度打开:
https://blog.csdn.net/qq_40808154/article/details/94136325
二、drop,truncate,delete区别
drop(删除表):删除内容和定义,释放空间。简单来说就是把整个表去掉。
以后要新增数据是不可能的,除非新增一个表。
truncate(清空表中的数据) :删除内容,释放空间但不删除定义(保留表的数据结构)。
与drop不同的是,只是清空表数据而已。
注意: truncate不能删除行数据,要删就要把表清空。
delete(删除表中的数据):
delete语句用于删除表中的行。
delete语句执行删除的过程是每次从表中删除一行,并且同时将该行的删除操作作为事务记录在日志中保存,以便进行回滚操作。
靠谱参考链接,复制到百度打开:
https://www.cnblogs.com/fjl0418/p/7929420.html
三、Python中深拷贝和浅拷贝的区别是啥?
群友回复,仅供参考:
深:完全是新的,和原来没关系。
浅:只是拷贝过去一个引用。拷贝的是内存地址值。
深拷贝就是开辟一个新的内存空间。
以上回答,小编觉得较为靠谱,面试可以这样简单的回答。
什么是深拷贝?什么是浅拷贝?或者是普通的赋值,和这两者间的联系与区别到底是啥?
1.浅拷贝
通过代码来看下:
a=[1,2,3[1,2,3[5,6]]]
这是一个双重嵌套的列表。这是个大列表,大列表的第四个元素是一个列表。同时这个列表里面的第四个元素又是个列表。
如果把a复制给b的话:
在Python内部实现里面,如果让b=a
,直接把a引向的list,让b也引向这同一个对象。
在这样一个b=a
的赋值的结果里面,不管是改变a指向的列表还是b指向的列表,另外一个都会被改变,因为它们指向的都是同一个列表。
c=a.copy
这样c和b的差别就看出来了:
c指向的列表和a、b不是同一个列表了。
但是这个列表里面的元素,指向的仍然是同一个元素。
所以这个.copy
,这个浅拷贝意味着在指向的这个对象的第一层的层面上进行了赋值。
在这个容器内部如果再有指向别的可变元素的这个对象的话,那么它内部其实并没有赋值。
所以只是第一层数据的一个赋值,再往深层次的数据没有赋值,还是指向原来的这个。
c[3][0]=9
a和b的第四个元素指向的这个列表也变成了9,2,3的列表。
如果写成c[1]=0
,你看到只是改变了它自己,因为它只是在第一层。把c的第二个元素从2改成了0。
但是a和b没有受到c这层的影响。
在更深层次上,有着共同指向的列表去修改的时候,改这个9的时候,其它的a和b也会受影响。
以上是浅拷贝。
2. 深拷贝
d和前面的a、b、c没有任何共同的地方。
d=copy.deepcopy(a)
不管这个容器里面嵌套了多少层对象,它会把它一层一层的通过迭代把它全部拷贝出来。
深入得把它复制一份。
d指向的是一个全新的列表,这个列表里面所有的元素指向的可变的元素(其它中的列表中的元素也是全新的)。
d里面做的修改,不管是在哪一层,都不会影响a、b、c所指向的内容。
d[3][0]=100
这个时候可以看到,它改的是自己的列表内部指向的引用的另外一个列表的这个值。和前面一点关系都没有。
即使是改的更深层次上的,也和a、b、c一点关系都没有。
d[3][3][0]=100
从这张图中可以清楚得看到:
a是开始定义的一个嵌套列表,b是通过赋值,它们引用上了同一个值。
这个时候,在第一层次上,它们都是共同体,只要有一个改,另外一个也受影响。
c是个浅拷贝。这个浅拷贝可以看到,在第一层上修改互不影响,但是再往深层次,它们又指向相同的了,这个时候就受影响了。
d是个深拷贝,不管多深都是完全重新赋值的一套,这个时候就真正的不受影响。
如果真正想让它们实现互不影响,就用深拷贝。
3.总结
如果用浅拷贝的话,在第一层没问题,但是深层次上,它们指向的是相同的列表,没办法,除非加一行这样的代码:
c[3]=[0,1,2,3]
这个时候c和前面a、b之间的联系就断了。已经让它指向一个新定的列表。这个时候后面这个跟前面一点关系都没有了。
只要知道在内部,它们之间到底是分还是合,指向的是不同的对象还是相同的对象,同一个地址还是不同的地址,那你就知道该如何去做了。
就知道改哪个,哪些数据会变,哪些数据不会变了。
靠谱参考链接:
https://www.bilibili.com/video/BV1jT4y1G7AN
工具:http://pythontutor.com/visualize.html#mode=edit
注:文章中的链接是本人整理过来的,皆来自网络。链接中的视频、文章版权皆归原作者所有。计算机知识都一样,文章是小编整理的。如有雷同,纯属巧合。
公众号 清菡软件测试 首发,更多原创文章:清菡软件测试 136+原创文章,欢迎关注、交流,禁止第三方擅自转载。如有转载,请标明出处。