Python学习,动态类型模型

Python数据类型概述:动态类型与强类型的特性 Python的类型系统具有动态类型强类型两大核心特性。动态类型意味着变量无需声明类型,类型在运行时确定,且变量可以重新绑定到不同类型的对象。强类型则表现为不支持隐式类型转换,类型错误会在运行时被捕获。Python的主要数据类型包括基本类型(如int、str等)容器类型(如list、dict等)。动态类型提供了灵活性,适合快速原型开发,而强类型则增强了代码的安全性可维护性。Python 3.5+引入了类型注解,允许开发者可选地添加类型信息,并通过工具如mypy进行静态类型检查。在实践中,合理利用类型注解 阅读详情

Python的变量不用声明,赋值之后就可以直接使用,类型是在运行过程中自动确定的,这就是动态类型模型。该模型把变量和对象设计成两个不同的实体,对象是存储数据的地方,对象的类型是由初始值自动决定的,而变量仅仅是对象的引用。变量是通用的,同一个变量名可以引用任何类型的对象。

一,变量、对象和引用

动态类型模型由三部分构成:变量、对象和引用。变量和类型没有任何关系,类型是对象的,变量只是引用对象而已。例如,a=3,a是变量名,Python自动创建一个内存对象,值是3,变量a自动引用对象。
在这里插入图片描述
在这里插入图片描述
1,变量

对于一个变量,当第一次给它赋值时,就创建了变量,并把变量关联到内存对象。之后对变量的赋值,将会改变变量引用的对象。

从技术上来看,变量是指针类型,所谓的数据类型,是指变量引用的对象的类型,类型的概念存在于对象中,而不是变量中。

当变量出现在表达式中时,它会被当前引用的对象所代替,无论这个对象是什么类型。

2,对象

从技术上讲,对象是一块内存空间,存储头部和内容。每个对象都有两个标准的头部信息:一个类型标志符用于标识对象的类型,一个计数器用于标识被应用的次数。当对用被引用的次数为0时,Python会自动回收该对象占用的内存空间。

3,引用

变量和对象通过引用关联在一起,在使用变量时,Python自动通过引用获取或设置对象的值。

二,通用类型分类

Python的核心类型,通常细分为:整数、字符串、元组、列表、字典,也可以按照操作分为整数、序列和映射,也可以按照对象是否支持原处修改,把类型分为可变类型和不可变类型。

1,按照操作分类

  • 整数是不可变的对象,支持算术运算;
  • 集合是无序的,支持集合操作;
    字符串、列表和元组是序列,元素的位置是顺序的,可以按照偏移对序列进行索引和分片操作;
  • 字典是映射,元素之间没有顺序,但是通过映射来获取值,而不是通过偏移。

2,按照可变性分类
对象的可变性是指对象是否可以原处修改,原处修改是指对象的内存空间是否可以被修改。

Python的类型从可变性上可以分为两类:可变类型和不可变类型,

  • 可变类型:列表、字典
  • 不可变类型: 整数,字符串、元组,集合

可变对象可以在原处被修改,不可变对象一旦创建成功,就保持不变。

三,赋值和共享引用

在使用赋值符号(=)时,如果变量对变量“赋值”,产生共享引用,两个变量引用同一个对象;如果是使用对象对变量赋值,产生的结果是创建新的对象,同时使变量引用新的对象。

例如,把变量赋值给变量时,变量之间存在共享引用,也就是说,多个变量名引用同一个对象,

...
学Python的过程中,往往因为没有资料或者没人指导从而导致自己不想学下去, 因此特意准备了个QQ群991032883,可以获取源码,解答,学习路线、开发工具等给大家免费使用! 
...
a=3
b=a

此时,变量a和b同时指向一个对象。变量名赋值给变量名,使得两个变量引用相同的对象。

当把对象赋值给变量时,并不是替换了原始的对象,而是让这个变量去引用另一个完全不同的对象。

例如,当变量重新赋值时,a=‘abc’,变量a引用的是另一处内存空间。此时,b是3,而a是abc。

a='abc'

1,共享引用和可原处修改

当共享引用的对象是可变类型时,对可变对象的修改,会反应到共享引用的变量上。

例如,变量l1和l2是共享引用,引用的对象是列表,而列表支持原处修改:

l1=[1,2,3]
l2=l1

当修改变量l1引用的对象的值时,变量l1和l2引用的还是同一个内存空间,l1和l2的值是相同的。

...
学Python的过程中,往往因为没有资料或者没人指导从而导致自己不想学下去, 因此特意准备了个QQ群991032883,可以获取源码,解答,学习路线、开发工具等给大家免费使用! 
...
l1[0]=5

2,共享引用和相等

==和is是不同的“相等”比较,前者是指值相等,后者是指对象的同一性(同一个对象)。

例如,a和b既是值相等,也是对象同一的。

a=[1,2]
b=a

例如,a和b是值相等,但是对象不是同一个,这说明,可变类型的常量的缓存是不可复用的。

a=[1,2]
b=[1,2]

例如,x和y既是值相等,也是对象同一的,这说明,不可变类型的常量的缓存是复用的。

x=1
y=1

四,深拷贝和浅拷贝

浅拷贝是指引用的拷贝,深拷贝是指对象的拷贝。在Python中,浅拷贝存在于下面三种情况:

  • 共享引用是浅拷贝,两个变量引用同一个对象。
  • 由于Python会复用不可变对象,因此,不可变对象的赋值都是浅拷贝。
  • 赋值生成的是浅拷贝。

深拷贝是指值相同的不同对象,因此,== 运算的结果是True,而 i s运算的结果是False,例如,a和b的值相同,但是引用的对象不同。

a=[1,2]
b=[1,2]

对a进行修改,不会引用b的值,列表的深拷贝,也可以通过list.copy()函数来实现。

>>> a=[1,2]
>>> b=a.copy()
>>> a==b
True
>>> a is b
False

对于可变类型的深拷贝:

  • 列表类型有:list.copy(),list[:],list(list_var)
  • 字典类型:dict.copy()
  • copy标准库模块中
import copy
x=copy.deepcopy(y)
Python语言采用严格的动态类型系统 然而,这也可能导致一些潜在的错误,因为变量的类型在运行时才确定,如果不小心使用了错误的类型,就会引发运行时错误。动态类型系统是指在运行时进行类型检查的系统,即变量的类型是在运行时确定的,而不是在编译时确定的。相比之下,静态类型系统在编译时确定变量的类型。由于变量的类型只在运行时确定,所以在编码过程中要特别留意类型相关的错误,并进行适当的类型检查转换,以避免潜在的错误。总结来说,Python语言采用了严格的动态类型系统,它在运行时确定变量的类型,使得代码编写更加灵活,但也需要开发者注意类型相关的错误。 阅读详情

相关推荐

基于 YOLOv26 的食品包装缺陷检测系统:智能视觉质检方案

本文提出了一种基于YOLOv26深度学习的食品包装缺陷智能检测系统。该系统能够自动识别多种常见包装缺陷,包括密封不良、破损、污染、标签错误等8类问题。相比传统人工检测方法,该系统具有高精度、多类别分类、实时推理等优势。文章详细介绍了系统架构,包含数据采集、预处理、YOLOv26检测模型后处理四个核心模块,并提供了完整的环境配置数据处理代码实现。该系统为食品包装行业提供了一种高效、准确的智能视觉质检解决方案。

一键难忘的博客 632

Python分享之动态类型

我们看到,即使是多个引用指向同一个对象,如果一个引用值发生变化,那么实际上是让这个引用指向一个新的引用,并不影响其他的引用的指向。表实际上是包含了多个引用的对象(每个引用是一个元素,比如L1[0],L1[1]..., 每个引用指向一个对象,比如1,2,3),。而L1[0] = 10这一赋值操作,并不是改变L1的指向,而是对L1[0], 也就是表对象的一部份(一个元素),进行操作,所以所有指向该对象的引用都受到影响。通过赋值,引用a指向对象3。引用对象的分离,对象是内存中储存数据的实体,引用指向对象。

240

openbmc 支持mctp over pcie(二)

本文介绍了在OpenBMC系统中实现MCTP over PCIe的社区方案,主要针对AMD CPUIntel CPU平台。方案基于社区开发的mctpd应用层内核驱动,通过修改设备树(dts)配置内存区域,并编译Linux内核模块。验证时可通过查看/proc/net/protocols确认MCTP协议支持,使用ip addr命令检查mctppci0网络接口状态。相关代码文档参考了AspeedTechCodeConstruct的GitHub仓库。该方案为BMC作为MCTP端点提供了标准化实现方法。

wit_yuan的专栏 326

Python高级特性】动态类型

Python 是一种动态类型语言,这意味着变量的类型是在运行时确定的,而不是在编译时决定。Python 变量可以在其生命周期中绑定不同类型的值,这与静态类型语言(如 Java、C++)不同,后者要求在编译时就确定变量类型。

冰可乐的数据之路 1291

Python动态类型介绍

变量的类型实在运行过程中自动决定的,而不是通过声明来决定的变量首次赋值时,创建它。之后的再次赋值会改变该变量的值2.类型的概念是存在于对象中而不是变量名中。变量名是通用的,它只是在特定时刻引用某个特定的对象而已。当变量出现在表达式中时,它会马上被当前引用的对象所代替任何变量名在使用前必须明确地赋值。用未赋值的变量会产生错误。在Python内部,变量实际上是指向对象内存空间的一个指针graph LRid1(变量名)-->|引用|id2(对象);

yygr的博客 486

10分钟弄懂,Python 进阶动态类型的教程

描述:动态类型是一种编程语言特性,允许变量的类型在运行时动态确定,而不需要在代码中显式声明.Python 的每个变量可以随时赋予不同类型的值,这使得代码更具灵活性.示例# 变量初始为整数类型x = 10print(type(x)) # 输出: <class 'int'># 变量重新赋值为字符串类型print(type(x)) # 输出: <class 'str'>优点灵活性高:同一变量可以在不同场合表示不同的数据类型.易于快速开发:无需提前声明类型,可以专注于业务逻辑.缺点。

python茶水实验室 1123

【零基础学Python动态类型、注释、输入与输出

动态类型使用起来更方便、更灵活,但这也导致了它可能会出现许多问题,所以动态类型也是有利有弊的。

weixin_51983604的博客 1396

Python 学习 第四篇:动态类型模型

Python的变量不用声明,赋值之后就可以直接使用,类型是在运行过程中自动确定的,这就是动态类型模型。该模型把变量对象设计成两个不同的实体,对象是存储数据的地方,对象的类型是由初始值自动决定的,而变量仅仅是对象的引用。变量是通用的,同一个变量名可以引用任何类型的对象。 一,变量、对象引用 动态类型模型由三部分构成:变量、对象引用。变量类型没有任何关系,类型是对象的,变量只是引...

albh81462的博客 329

python学习笔记1:动态类型模型

如下图是python动态类型模型示意图 (说白了就是将变量对象分别保存在不同的区域,其具体实现还是有其复杂性,但不妨碍我们理解) 关于模型的一些说明及结论: 1.python中变量有些类似C++中的指针,但不同的是,python将这个含义做了普适性推广,让变量不再必须指向某种具体类型。这样变量a可以指向整型3,也可以指向字符串类型“abc”或者列表“[1,2,3]”等

Gun_1986的专栏 565

Python学习手册(第四版)】学习笔记06-Python动态类型-赋值模型详解

主要介绍Python动态类型(也就是Python自动为跟踪对象的类型,不需要在脚本中编写声明语句),Python中变量对象是如何通过引用关联,垃圾收集的概念,对象共享引用是如何影响多个变量的,Python中引用是如何影响相等的概念。

兴焉的博客 1443

Python 基础教程:动态类型模型Python开发基础学习

当修改变量l1引用的对象的值时,变量l1l2引用的还是同一个内存空间,l1l2的值是相同的。l1[0]=5==is是不同的“相等”比较,前者是指值相等,后者是指对象的同一性(同一个对象)。例如,ab既是值相等,也是对象同一的。a=[1,2]b=a例如,ab是值相等,但是对象不是同一个,这说明,可变类型的常量的缓存是不可复用的。a=[1,2]b=[1,2]例如,xy既是值相等,也是对象同一的,这说明,不可变类型的常量的缓存是复用的。x=1y=1。

qq_58071132的博客 862

python变量类型是动态的_Python 学习 第四篇:动态类型模型

Python的变量不用声明,赋值之后就可以直接使用,类型是在运行过程中自动确定的,这就是动态类型模型。该模型把变量对象设计成两个不同的实体,对象是存储数据的地方,对象的类型是由初始值自动决定的,而变量仅仅是对象的引用。变量是通用的,同一个变量名可以引用任何类型的对象。一,变量、对象引用动态类型模型由三部分构成:变量、对象引用。变量类型没有任何关系,类型是对象的,变量只是引用对象而已。例如,...

weixin_39806388的博客 117

python动态类型语言、变量不需要显示声明类型,Python 语言学习 第四篇:动态类型模型...

Python的变量不用声明,赋值之后就可以直接使用,类型是在运行过程中自动确定的,这就是动态类型模型。该模型把变量对象设计成两个不同的实体,对象是存储数据的地方,对象的类型是由初始值自动决定的,而变量仅仅是对象的引用。变量是通用的,同一个变量名可以引用任何类型的对象。一,变量、对象引用动态类型模型由三部分构成:变量、对象引用。变量类型没有任何关系,类型是对象的,变量只是引用对象而已。例如,...

weixin_34966467的博客 1472

Python 语言学习 第四篇:动态类型模型

Python的变量不用声明,赋值之后就可以直接使用,类型是在运行过程中自动确定的,这就是动态类型模型。该模型把变量对象设计成两个不同的实体,对象是存储数据的地方,对象的类型是由初始值自动决定的,而变量仅仅是对象的引用。变量是通用的,同一个变量名可以引用任何类型的对象。 一,变量、对象引用 动态类型模型由三部分构成:变量、对象引用。变量类型没有任何关系,类型是对象的,变量只是引用对象而已...

weixin_34174422的博客 162

Python中的多态性

它可以允许我们定义一个函数或方法,它能够接受不同类型的数据作为参数,并根据这些数据的实际类型执行不同的操作。2. 方法重载(Overloading):Python没有传统意义上的方法重载,但我们可以通过使用函数的默认参数关键字参数来实现类似的功能。1. 方法重写(Overriding):子类可以提供自己的方法实现,当调用这个方法时,会根据对象的实际类型来调用相应的方法。print(greet("张三", language="Chinese")) # 输出:你好,张三!

476

9.Python进阶_动态类型

Vamei前辈博客地址:http://www.cnblogs.com/vamei/archive/2012/07/10/2582795.html #!/usr/bin/python # -*- coding: cp936 -*- import copy ''' 动态类型(dynamic typing)是Python另一个重要的核心概念。 我们之前说过,Python的变量(variab...

dietan8353的博客 253

chatgpt赋能pythonPython动态数据类型

本文由chatgpt生成,文章没有在chatgpt生成的基础上进行任何的修改。以上只是chatgpt能力的冰山一角。作为通用的Aigc大模型,只是展现它原本的实力。对于颠覆工作方式的ChatGPT,应该选择拥抱而不是抗拒,未来属于“会用”AI的人。🧡AI职场汇报智能办公文案写作效率提升教程 🧡专注于AI+职场+办公方向。下图是课程的整体大纲下图是AI职场汇报智能办公文案写作效率提升教程中用到的ai工具。

test100t的博客 193

5. 解释一下 Python 中的动态类型

动态类型指的是在运行时,变量的数据类型是可以改变的。这与静态类型相反,静态类型在编译时就需要明确指定变量的数据类型,并且一旦确定,就不能再改变。在Python中,变量的数据类型是根据其赋值的内容动态确定的。这意味着你可以在不显式声明类型的情况下直接给变量赋值,而解释器会根据值的类型为变量分配相应的数据类型。x = 42 # x是整数类型y = "Hello" # y是字符串类型z = 3.14 # z是浮点数类型在上述例子中,变量x首先被赋值为整数42,因此被解释为整数类型。接着,变量y。

weixin_68551689的博客 1746

Python动态类型简介与对象拷贝

Python动态类型Python中,我们使用变量时,并没有声明变量的存在类型。类型是在运行过程中自动决定的。 a = 3 Python将会执行三步去完成上面这个请求。 1.创建一个对象代表3 2.创建一个变量a,如果a未创建。 3.将变量a与对象3相连接。 可以将变量a看作对象3的一个引用。 a = 3 b = a 多个变量可以指向同一个对象,在Python中叫共享引用。 Python在每个对象中保持了一个计数器,用于记录当前指向该对象的引用的数目,一旦计数器被设置为0,该对象的内存空间就会自动回

weixin_43945963的博客 284

IB Specification Vol 2-Release-2.0-Final-2025-07-31 - 2

内容概要:本文档为《400_IB Specification Vol 2-Release-2.0-Final-2025-07-31.pdf》,主要描述了InfiniBand架构2.0版本的物理层规范。文档详细规定了链路初始化、配置与训练流程,包括但不限于传输序列(TS1、TS2、TS3)、链路去偏斜、波特率、前向纠错(FEC)支持、链路速度协商及扩展速度选项等。此外,还介绍了链路状态机的不同状态(如禁用、轮询、配置等),以及各状态下应遵循的规则命令。针对不同数据速率(从SDR到XDR)的链路格式化规则也有详细说明,确保数据包格式控制符号在多条物理通道上的一致性正确性。文档还涵盖了链路性能监控错误检测机制。适用人群:适用于从事网络硬件设计、开发及维护的技术人员,尤其是那些需要深入了解InfiniBand物理层细节的专业人士。使用场景及目标:① 设计实现支持多种数据速率编码方式的InfiniBand设备;② 开发链路初始化训练算法,确保链路两端设备能够正确配置并优化通信质量;③ 实现链路性能监控错误检测,提高系统的可靠性稳定性。其他说明:本文档属于InfiniBand贸易协会所有,为专有信息,仅供内部参考技术交流使用。文档内容详尽,对于理解实施InfiniBand接口具有重要指导意义。读者应结合相关背景资料进行学习,以确保正确理解应用规范中的各项技术要求。

上一篇: Python学习,python3字符串的操作总结
下一篇: python学习,set使用教程
sehun_sx
博客等级 码龄4年 38粉丝 101原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值