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

其中还有更多相关用法。

 

posted @ 2021-07-06 16:10  Lee597  阅读(57)  评论(0)    收藏  举报