数据类型分类

一、按存值个数

存一个值:整型/浮点型/字符串

存多个值:列表/字典/元组/集合

二、按有序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,主动抛出异常,没有用,创建框架/创建语言有用