python面试题-1
赋值、浅拷贝、深拷贝
1、 赋值: 只是复制了新对象的引用,不会开辟新的内存空间。
2、 浅拷贝: 创建新对象,其内容是原对象的引用。
3、 深拷贝:和浅拷贝对应,深拷贝拷贝了对象的所有元素,包括多层嵌套的元素。深拷贝出来的对象是一个全新的对象,不再与原来的对象有任何关联。
具体分析如下:
浅拷贝和深拷贝都只针对于引用数据类型,浅拷贝只复制指向某个对象的指针,而不复制对象本身,新旧对象还是共享同一块内存;但深拷贝会另外创造一个一模一样的对象,新对象跟原对象不共享内存,修改新对象不会改到原对象。
即:深浅拷贝的主要区别是 是否产生新对象
浅拷贝不产生,也不占内存,深拷贝产生,但改动深拷贝不影响原对象。
详解可以见知乎:
Python中的赋值(复制)、浅拷贝与深拷贝 - 知乎 (zhihu.com)
https://zhuanlan.zhihu.com/p/54011712
存储过程
存储过程,百度百科上是这样解释的,存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来调用存储过程。
即:存储过程是完成特定功能的语句集,经过一次编译后不用再编译,通过指定存储过程的名字来调用
缺点是开发调试性差和可移植性差。
优化数据库
1、 选取最适合的字段属性
2、 使用join代替子查询
3、 使用union代替创建临时表
4、 使用事务,就是begin、commit来保持数据的一致性和完整性
5、 LOCKTABLE和UNLOCKTABLE方法来锁定表
6、 插入外键
7、 建立索引
8、 优化查询语句
其中优化查询语句主要是以优化where语句为主
参考网址如下:
https://zhuanlan.zhihu.com/p/65058992
https://www.cnblogs.com/luokakale/p/7242839.html
列表常用方法
1、 创建列表
2、 添加新元素
结尾添加 append(想添加的内容)
插入元素 insert(想插在第几位之前,插入的内容)
扩展列表 原表.extend(想插入原表中的新表)
3、 遍历列表
4、 访问列表中的值
5、 从List删除元素
删除特定元素 List.remove( A)
删除指定位置的元素,默认最后一个 List.pop()
删除整列 del List
参考网址如下:
https://www.cnblogs.com/panwenbin-logs/p/5497771.html
列表去重
1、 使用set方法
orgList = [1,0,3,7,7,5]
#list()方法是把字符串str或元组转成数组
formatList = list(set(orgList))
print (formatList)
2、 使用keys方法
orgList = [1,0,3,7,7,5]
#list()方法是把字符串str或元组转成数组
formatList = list({}.fromkeys(orgList).keys())
print (formatList)
3、 循环遍历
orgList = [1,0,3,7,7,5]
formatList = []
for id in orgList:
if id not in formatList:
formatList.append(id)
print (formatList)
4、 按照索引再排序
orgList = [1,0,3,7,7,5]
formatList = list(set(orgList))
formatList.sort(key=orgList.index)
print (formatList)
参考网址:
https://www.pyth!@ontab!#.c¥%om/html/2017/pythonjichu_1204/1194.html
(中间符号!@#¥%请自己去掉,谢谢)
切片
切片操作基本表达式:object[start_index:end_index:step]
step:正负数均可,其绝对值大小决定了切取数据时的‘‘步长”,而正负号决定了“切取方向”,正表示“从左往右”取值,负表示“从右往左”取值。当step省略时,默认为1,即从左往右以步长1取值。“切取方向非常重要!”“切取方向非常重要!”“切取方向非常重要!”,重要的事情说三遍!
start_index:表示起始索引(包含该索引对应值);该参数省略时,表示从对象“端点”开始取值,至于是从“起点”还是从“终点”开始,则由step参数的正负决定,step为正从“起点”开始,为负从“终点”开始。
end_index:表示终止索引(不包含该索引对应值);该参数省略时,表示一直取到数据“端点”,至于是到“起点”还是到“终点”,同样由step参数的正负决定,step为正时直到“终点”,为负时直到“起点”。
以list对象a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]为例:
1、从左往右 a[:]/a[::]
结果均为[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
从右往左 a[::-1]
结果为[9,8,7,6,5,4,3,2,1,0]
2、从左往右,带值 a[1:6]/a[:6]
结果均为[1,2,3,4,5]
从右往左,带值 a[6::-1]
结果为[6,5,4,3,2,1,0]
从右往左,带值 a[:6:-1]
结果为[9,8,7]
参考:
https://www.jianshu.com/p/15715d6f4dad
其中还有更多相关用法。

浙公网安备 33010602011771号