浅拷贝:创建一个新对象,但只拷贝原对象中元素的引用(不递归拷贝内部的对象)深拷贝:创建一个新对象,并递归拷贝所有内部对象,完全独立于原对象import copy#原数据o = [[1,2,3],[4,5,6],'hello']#浅拷贝的三种方式shallow1 = o.copy() #字典/列表的copy方法shallow2 = o[:] #切片shallow3 = copy.copy(o) #copy模块#深拷贝deep = copy.deepcopy(o)
import copyo = [[1,2],[3,4],[5,6]]shallow = o.copy()deep = copy.deepcopy(o)#修改原对象的内部因素o[0][0] = 999 #取到的是第一个地址[1,2]里面的第一个元素print("原对象:",o) #[[999,2],[3,4],[5,6]] print("浅拷贝:",shallow) #[[999,2],[3,4],[5,6]] #受修改的影响print("深拷贝:",deep) #[[1,2],[3,4],[5,6]] 不受修改的影响
深浅拷贝的核心问题只针对 “可变对象”,对不可变对象来说,深浅拷贝没有实际意义,那么Python中的可变与不可变类型分为哪些呢int #整数float #浮点数complex #复数bool #布尔值
str #字符串tuple #元组bytes #字节序列 :b'hello'
frozenset #不可变集合 :frozenset9([1,2,3])
NoneType #None值range #range对象
list #列表bytearray #字节数组:bytearray(b'hello')
set #集合dict #字典: {'a':1,'b':2}
class MyClass: #类的实例 pass
命名规则:与C语言类似,以字母,数字,下划线组成,不以数字开头,不使用关键字基本数据类型(在前面的内容里很多都已经涉及),现在做一个核心总结int #整数float #浮点数complex #复数str #字符串bool #布尔类型None #空值
list = [1,2,3] #列表(可变)a = (1,2,3) #元组:(不可变)dict = {'a':1,'b':2} #字典set = {1,2,3} #集合
#单个赋值x = 1#链式赋值x = y = z =1#多个变量分别赋值x,y,z=1,2,3#交换变量值a,b = b,a#增强赋值x+=5
def outer(): x = 10 def inner(): nonlocal x #声明:改外层x x =20 print(x) #20 inner() print(x) #20outer()#没有nonlocal:#第一个print(x) #20 #这里的x实际上只是inner里的x 这是一个新的x 可以叫做b#第二个print(x) #10 #打印外层x 注意缩进
变量类型可以动态改变,和可变数据类型不同,变量类型动态改变指的是变量能指向不同类型的对象吗,而可变数据类型指的是对象本身的内容能修改吗,变量只是对象的“标签”,可以随时重新贴del x #删除变量'x' in locals #判断变量是否存在try: x print("x exists")except NameError: print("x does not exist") #判断变量是否存在type(x) #查看变量指向的类型isinstance(x,int) #判断是否是某类型id(x) #查看对象地址x = 10 #变量赋值a,b = b,a #交换两个变量值x += 5 #简洁的运算赋值x == y #判断值是否相等x is y #判断是否同一对象locals()/globals() #查看当前作用域变量
使用{}或dict()构造函数创建,由一系列逗号分割的 键:值 对组成#访问dict["key"] #通过获取键值,不存在则抛出KeyError#安全访问dict.get("key") #获取值,不存在则返回None,不会报错#添加/修改dict["new_key"] = value #键存在则修改,不存在则添加#删除del dict["key"] #删除指定键值对,不存在则抛出KeyError#安全删除dict.pop("key") #删除并返回该键的值,不存在则返回默认值#随机删除dict.popitem() #删除并返回一个键值对#成员检查if "key" in dict: print("存在")len(dict) #获取键值对的数量dict.update(other_dict) #合并dict.clear() #移除所有元素 #视图对象.keys() #返回字典键的视图.values() #返回字典值的视图.items() #返回(键,值)元组的视图
for key,value in dict.items(): print(f"{key}:{value}")
今天就到这啦 下期继续分享collections模块中基于字典的扩展......