面试题汇总
Posted yangyuqing
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面试题汇总相关的知识,希望对你有一定的参考价值。
1. 用一行转换a,b的值
a=1 b=2 a,b=b,a print(a,b)
内存里存两个东西,一个是1和2的内存地址,一个是名称空间,名称空间存的是变量与值的对应关系
对应关系存的是a这个变量指向的是哪个内存地址,通过内存地址找到内容
a,b=b,a改变了对应关系
2. 判断类型
u1 = (1) tu2 = (1,) print(tu1,type(tu1)) print(tu2,type(tu2)) tu1 = ([1]) tu2 = ([1],) print(tu1,type(tu1)) print(tu2,type(tu2))
元组 如果元组里面只有一个元素且不加逗号,那此元素是什么类型就是什么类型
3. 去重
li=[1,2,33,33,2,1,4,5,6,6] set1=set(li) print(set1) li=list(set1) print(li)
4. 深浅拷贝
1. 赋值运算
l1 = [1,2,3,[‘barry‘,‘alex‘]] l2 = l1 l1[0] = 111 print(l1) # [111, 2, 3, [‘barry‘, ‘alex‘]] print(l2) # [111, 2, 3, [‘barry‘, ‘alex‘]] l1[3][0] = ‘wusir‘ print(l1) # [111, 2, 3, [‘wusir‘, ‘alex‘]] print(l2) # [111, 2, 3, [‘wusir‘, ‘alex‘]]
赋值运算来说,l1和l2指向同一个内存地址,所以他们是完全一样
2. 浅拷贝
l1 = [1,2,3,[‘barry‘,‘alex‘]] l2 = l1.copy() print(l1,id(l1)) # [1, 2, 3, [‘barry‘, ‘alex‘]] 2380296895816 print(l2,id(l2)) # [1, 2, 3, [‘barry‘, ‘alex‘]] 2380296895048 l1[1] = 222 print(l1,id(l1)) # [1, 222, 3, [‘barry‘, ‘alex‘]] 2593038941128 print(l2,id(l2)) # [1, 2, 3, [‘barry‘, ‘alex‘]] 2593038941896 l1[3][0] = ‘wusir‘ print(l1,id(l1[3])) # [1, 2, 3, [‘wusir‘, ‘alex‘]] 1732315659016 print(l2,id(l2[3])) # [1, 2, 3, [‘wusir‘, ‘alex‘]] 1732315659016
浅拷贝来说,第一层创建的是新的内存地址,而从第二层开始,指向的都是同一个内存地址,所以,对于第二层以及更深的层数来说,保持一致性
列表里面套列表,第一层指向共同的内存,第二层指向不同内存
3. 深拷贝
import copy l1 = [1,2,3,[‘barry‘,‘alex‘]] l2 = copy.deepcopy(l1) print(l1,id(l1)) # [1, 2, 3, [‘barry‘, ‘alex‘]] 2915377167816 print(l2,id(l2)) # [1, 2, 3, [‘barry‘, ‘alex‘]] 2915377167048 l1[1] = 222 print(l1,id(l1)) # [1, 222, 3, [‘barry‘, ‘alex‘]] 2915377167816 print(l2,id(l2)) # [1, 2, 3, [‘barry‘, ‘alex‘]] 2915377167048 l1[3][0] = ‘wusir‘ print(l1,id(l1[3])) # [1, 222, 3, [‘wusir‘, ‘alex‘]] 2915377167240 print(l2,id(l2[3])) # [1, 2, 3, [‘barry‘, ‘alex‘]] 2915377167304
深拷贝:列表里套列表,两个分别指向不同的内存地址
对于深copy来说,两个是完全独立的,改变任意一个的任何元素(无论多少层),另一个绝对不改变。
以上是关于面试题汇总的主要内容,如果未能解决你的问题,请参考以下文章