当前位置:首页>python>Python语法基础2

Python语法基础2

  • 2026-10-11 08:03:57
Python语法基础2
上期写到深浅拷贝,先整理一下关于深浅拷贝的知识点
深浅拷贝是处理对象复制时的两个核心概念。
浅拷贝:创建一个新对象,但只拷贝原对象中元素的引用(不递归拷贝内部的对象)
深拷贝:创建一个新对象,并递归拷贝所有内部对象,完全独立于原对象
常见拷贝方式:
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中的可变与不可变类型分为哪些呢
不可变数据类型
1.数字类型(都不可变)
int   #整数float  #浮点数complex  #复数bool   #布尔值
2.序列类型(部分不可变)
str   #字符串tuple   #元组bytes  #字节序列 :b'hello'
3.集合类型(部分不可变)
frozenset   #不可变集合 :frozenset9([1,2,3])
4.其他
NoneType   #None值range  #range对象
可变数据类型
1.序列类型(部分可变)
list   #列表bytearray   #字节数组:bytearray(b'hello')
2.集合类型(部分可变)
set   #集合dict   #字典: {'a':1,'b':2}
3.自定义类型
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
变量的作用域
局部变量 全局变量
nonlocal 关键字:内外函数共用同一个变量
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 注意缩进
变量的特殊性
变量类型可以动态改变,和可变数据类型不同,变量类型动态改变指的是变量能指向不同类型的对象吗,而可变数据类型指的是对象本身的内容能修改吗,变量只是对象的“标签”,可以随时重新贴
查看变量类型
print(type(x))
查看变量内存地址
print(id(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模块中基于字典的扩展......

最新文章

随机文章