数据类型分类
一、按存值个数
存一个值:整型/浮点型/字符串
存多个值:列表/字典/元组/集合
二、按有序or无序
有序:字符串/列表/元组
无序:字典/集合
三、按可变or不可变
可变:列表/字典/集合
不可变:整型/浮点型/字符串/元组
Python深浅拷贝
在python中,对象赋值实际上是对象的引用。python并没有拷贝这个对象,而是拷贝了这个对象的引用。
在python中,分为拷贝(赋值)、浅拷贝、深拷贝
注意:拷贝/浅拷贝/深拷贝都是针对可变数据类型而言的
然后这个毫无应用,就是面试经常问到
一、拷贝
当lt2是lt1的拷贝对象时,lt1内的可变数据类型发生变化,lt2变化;lt1内的不可变数据类型发生变化,lt2也变化。
就是简单的赋值。
# 不可变数据类型发生变化
lt1 = [1, 2, 3, [4, 5, 6]]
lt2 = lt1
lt1.append(7)
print(f'lt1:{lt1}')
print(f'lt2:{lt2}')
# lt1:[1, 2, 3, [4, 5, 6], 7]
# lt2:[1, 2, 3, [4, 5, 6], 7]
# 可变数据类型发生变化
lt1 = [1, 2, 3, [4, 5, 6]]
lt2 = lt1
lt1[3].append(7)
print(f'lt1:{lt1}')
print(f'lt2:{lt2}')
# lt1:[1, 2, 3, [4, 5, 6, 7]]
# lt2:[1, 2, 3, [4, 5, 6, 7]]
二、浅拷贝
当lt2为lt1的浅拷贝对象时,lt1内的可变数据类型发生变化,lt2变化;lt1内的不可变数据类型发生变化,lt2不变化。
浅拷贝是使用copy包中的copy()方法
# 不可变数据类型发生变化
import copy
lt1 = [1, 2, 3, [4, 5, 6]]
lt2 = copy.copy(lt1)
lt1.append(7)
print(f'lt1:{lt1}')
print(f'lt2:{lt2}')
# lt1:[1, 2, 3, [4, 5, 6], 7]
# lt2:[1, 2, 3, [4, 5, 6]]
# 可变数据类型发生变化
import copy
lt1 = [1, 2, 3, [4, 5, 6]]
lt2 = copy.copy(lt1)
lt1[3].append(7)
print(f'lt1:{lt1}')
print(f'lt2:{lt2}')
# lt1:[1, 2, 3, [4, 5, 6, 7]]
# lt2:[1, 2, 3, [4, 5, 6, 7]]
三、深拷贝
当lt2为lt1的深拷贝对象时,lt1内的可变数据类型发生变化,lt2不变化;lt1内的不可变数据类型发生变化,lt2不变化。
深拷贝是使用copy包中的deepcopy()方法
# 不可变数据类型发生变化
import copy
lt1 = [1, 2, 3, [4, 5, 6]]
lt2 = copy.deepcopy(lt1)
lt1.append(7)
print(f'lt1:{lt1}')
print(f'lt2:{lt2}')
# lt1:[1, 2, 3, [4, 5, 6], 7]
# lt2:[1, 2, 3, [4, 5, 6]]
# 可变数据类型发生变化
import copy
lt1 = [1, 2, 3, [4, 5, 6]]
lt2 = copy.deepcopy(lt1)
lt1[3].append(7)
print(f'lt1:{lt1}')
print(f'lt2:{lt2}')
# lt1:[1, 2, 3, [4, 5, 6, 7]]
# lt2:[1, 2, 3, [4, 5, 6]]
异常处理
一、什么是异常
异常就是程序运行时发生错误的信号(在程序出现错误时,会产生一个异常,如果程序没有处理它,就会抛出这个异常,程序的运行也会随之终止)
1.1 语法错误
语法错误,根本过不了python解释器的语法检测,必须在程序执行前就改正。
if
pass
# 语法错误都是SyntaxError,且无法被捕捉
1.2 逻辑错误
1/0
# 逻辑错误的错误类型往往是不一样的
二、异常处理
print(1)
try: # 尝试
print(2)
1 / 0 # 错误不会影响其他的代码,但报错会马上终止try缩进里的代码
print(3)
except: # 除此之外
pass
print(4)
# 1
# 2
# 4
print(1)
try:
print(2)
1 / 0
print(3)
except ZeroDivisionError as e: # try里面的代码出了什么错误,就得用什么错误捕捉,as是把错误赋值给e,可以写多个except捕捉多个异常
print('e:', e)
print(4)
# 1
# 2
# e: division by zero
# 4
# 最重要的,以后想捕捉异常就用这个
print(1)
try:
print(2)
1 / 0
print(3)
except Exception as e: # Exception可以捕捉任意异常
print('e:', e)
print(4)
# 1
# 2
# e: division by zero
# 4
三、了解部分
3.1 断言
assert,断言,在最早没有pycharm的时候,用这个来做调试,现在已经用不到了
3.2 抛出异常
raise,主动抛出异常,没有用,创建框架/创建语言有用