课时30:变量和对象

简介: 本节课时主要学习了对象的结构和存储方式,以及变量和对象的关系。首先,介绍了对象的结构和存储方式,并详细解释了变量的存储方式。其次,学习了在创建对象时如何处理变量a,并建立变量与对象之间的联系。再次,介绍了在内存中创建新对象的过程,强调了变量和对象的独立性,并解释了不同类型之间的运算问题。最后,介绍了类型转换的概念和应用,强调了类型转换是创建新对象,而非改变原有对象。同时,介绍了类型转换的四个函数,其中 int 函数可以用于将其他对象转换为整型。1. 对象结构和变量存储关系2. 变量与对象的关系及内存地址

课时30:变量和对象

 

摘要:本节课时主要学习了对象的结构和存储方式,以及变量和对象的关系。首先,介绍了对象的结构和存储方式,并详细解释了变量的存储方式。其次,学习了在创建对象时如何处理变量a,并建立变量与对象之间的联系。再次,介绍了在内存中创建新对象的过程,强调了变量和对象的独立性,并解释了不同类型之间的运算问题。最后,介绍了类型转换的概念和应用,强调了类型转换是创建新对象,而非改变原有对象。同时,介绍了类型转换的四个函数,其中 int 函数可以用于将其他对象转换为整型。

1. 对象结构和变量存储关系

2. 变量与对象的关系及内存地址

 

01.对象结构和变量存储关系

 

1.1 回顾对象结构


回顾对象的结构,对象分了三个部分 IdType和 Value。然后在 lesson_02创建了一个文件夹叫做img MG图片,把图1图2截的图放在文件夹中了,也就是可以根据图来看一下,需要用图的时候到文件夹中找一下就。对象完以后,其实示意有一个东西没有体现出来,因为我们现在只写了值,但是实际上的情况我们这除了值以外,应该还有一个变量,应该是a=123或者a=‘Hello’,还需要有一个变量,所以接下来我们再来整理一下变量和对象的一个关系。

 

1.2 对象和变量的关系


变量和对象有什么关系例如:写一个 a=3。问题来了,a=3是什么意思?是不是把3这个值存储到了变量a呢?注意,不是的。如果之前这么认为的,现在一定不能这么认为了。为什么?因为3看上去它只有一个3,但是实际上在内存中它也是一个完整的区域,所以它不仅仅是一个3,实际上它是一个对象。那么变量是如何存储对象的呢?

 

1.3变量要怎么存储对象


实际上对象并没有直接存储到变量中,在 Python中,变量其实不像变量,它更像是对象的一个别名,相当于你现在来看这个对象,要想直接去操作对象,这样实际上是不太好操作的。一个a=123,相当于给这块区域起了名,这块区域叫a了,以后我们再去找 a,想去找这个对象,就可以直接通过a去找了。注意在 Python 中其实这个变量它不变量,更像一个对象别名。如果用一个没有定义过的变量,比如说来一个b没有定义过的变量,这一执行它会给你报错叫做Name Error。它并没有说是变量错误,说名字错误  Name,name ‘b’ is not definedb是一个 Name,并没有说b是一个 Variable是一个变量,所以在 Python这个变量它更像是一个名字。

 

1.4变量中存储的是什么变量


Python中变量更像是给对象起了一个别名,这一块我们画图来演示。代码换成 a=123,把黄色部分删除,现在这有一个a=123,这又与之前不一样了,这里多了一个变量a。既然有东西也需要存到内存,所以注意实际上变量也是存到内存的,我们先暂且这么认为。在我们内存会有一个专门的区域,这个区域专门用来存储变量,画一个绿色区域,这个区域专门用来存储变量,它像一个表格似的表格似的,它分两列,一列是变量,还有一列是值。这儿写了一个a=123以后(注意这一定是先执行右边再执行左边的),所以在这一块需要先创建123这个对象在内存当中。复制一个对象(黄色区域有 IdType、和 Value,123这个对象我们创建好了。

image.png

 

02.变量与对象的关系及内存地址

 

接下来来处理变量,变量a有了,就需要在变量这个区域创建一个变量,变量的名字叫a,现在问题来了,变量在绿色区域,而对象在黄色区域,它们两个之间没有联系,也就现在是没有关系的,如果要想体现出变量a和123的联系,在变量里跟对象建立起关系。怎么建立关系呢?只需要在变量里存一个东西就行,存一个对象唯一的东西,也就是它的内存地址,Id。也就是说,a=123,它里边存的并不是123这个值,而是123这个对象的内存地址。现在就相当我a里边有一个类似于指针东西指向了这个对象。

image.png

注:变量中存储的不是对象的值,而是对象的Id内存地址),当我们使用变量时,实际上在通过对象Id在查找对象。这一点时刻要记住,在变量里有没有存东西,存的是什么?存的是对象的地址(存的是对象的 Id)。这个a,当使用这个a的时候,因为它里存的地址,这个地址是唯一的,解析器就可以根据这个地址找到对象。现在一个a=123,实际上在a存的是一个0x111,然后当去打印a的时候,解析器一看打印a,看a存的是什么?存的是0x111,然后就会通过这个地址找到对象。所以注意变量里存的是对象的Id,不是对象的值,存的是对象的 Id

例如:写一个b=a,已知a=123。写一个新的变量bb=a是等于a的值,a的值是内存地址。b=a后b的内存地址也是0x111,它也会去指向对象,也就是说a和b它们指向的是同一个对象。

打开 Python的交互模式,一个a=10,然后Id(a)打印看一下a的内存地址(写错了 ,这是一个小写的英文的括号)。

然后再写一个b=a打印一下b,b的值也是10。再看一下Id(b),发现Id(b)跟 Id(a)的值是一样的,因为他们现在指向的是同一地址。

image.png

再写一个a=456,现在的问题是这了一个a=456,它会不会对b产生影响?很明显这是不会的,因为a=456是一个新的对象。等于要在内存当中创建一个新的对象,这个对象的地址是什么解析器也不知道。假设写一个id=0x211,类型还是int,这时值变成了456,然后注意a现在是456也就是说a这块的地址已经不是0x111了,变成0x211了。然后这个箭头不是指向原来123了,变成指向新的对象了。这时b还是不会受影响,因为这是给a进行重新赋值,b没有影响b还是指向的是0x111

image.png

所以这个演示起来也非常简单,现在来看 a是10,b也是10,一个a=20,改变了a的值,再打印一下a是20,b还是10。b没有产生任何影响。

注:变量中保存的对象。只有在重新赋值时才会改变,只有在为变量重新赋值时才要改变。这什么意思例如:这有一个变量a,变量a=20,也就是说,一旦给它设置成a=20,a基本上是不会变的。除非写了一个a=30会变,这就相当于给变量a重新赋值了,这时它才会改变。不重新赋值它永远都不会变,这一点一定要注意,变量中的保存的对象只有在为变量重新赋值时才会改变。注意这句话就省事了,因为严格来说变量中保存的是对象的地址对象的Id,只有在为变量重新赋值时才会改变。

image.png

注:变量和变量之间是相互独立的,相互独立的变量和变量之间是相互独立的,修改一个变量它不会影响什么。一个不会影响另一个,改a对b没有产生任何影响。

以上就是变量和对象,待会把这图也截下来,这个图三一定注意。变量里边存的是内存地址,并且变量之间是相互独立的修改,修改一个不会影响另一个,并且变量只有再重新赋值的时候才会才会改变。

image.png



相关文章
|
数据库
Unknown column ‘字段名‘ in ‘field list‘解决方法
Unknown column ‘字段名’ in 'field list’英语翻译过来就是未知列的字段名在字段表中,也就是说数据库表中的字段名在实体类中找不到。 解决方案如下: 查看实体类的属性名和数据库表中的名字是否一致(注意数据库表字段中是否有空格或者下划线)
4758 0
|
8月前
|
人工智能 自然语言处理 测试技术
在IDE里使用DeepSeek-V3 和 DeepSeek-R1 满血版模型
如何在IDE里使用DeepSeek-V3 和 DeepSeek-R1 满血版模型
614 97
|
8月前
|
分布式计算 大数据 数据处理
从Excel到大数据:别让工具限制你的思维!
从Excel到大数据:别让工具限制你的思维!
308 85
|
8月前
鸿蒙开发:了解@Builder装饰器
@Builder装饰是鸿蒙UI开发中,非常重要的一个装饰器,在实际的开发中,合理且正确的使用,能够让我们的代码更加的简洁,有两点需要注意,一是,是用私有还是全局,取决于当前的组件的复用机制,如果多个页面都使用了,建议以全局为主;二是传参的动态更新,有更新就使用引用参数传递,没有更新按值传递即可。
379 28
鸿蒙开发:了解@Builder装饰器
|
9月前
|
SQL 运维 算法
链路诊断最佳实践:1 分钟定位错慢根因
本文聚焦于线上应用的风险管理,特别是针对“错”(程序运行不符合预期)和“慢”(性能低下或响应迟缓)两大类问题,提出了一个系统化的根因诊断方案。
656 103
|
8月前
|
存储 前端开发 区块链
基于区块链的慈善捐赠平台:透明与信任的未来
基于区块链的慈善捐赠平台:透明与信任的未来
401 24
|
7月前
|
机器学习/深度学习 人工智能 DataWorks
《数据驱动新变革:DataWorks与图神经网络打造AI决策“最强大脑”》
在数字化时代,数据成为企业的核心资产。DataWorks作为大数据管理的中流砥柱,负责存储、整合和治理海量数据;图神经网络(GNN)则为处理复杂图结构数据提供创新方案。两者结合,开启了知识图谱数据处理与分析的新纪元,助力人工智能推理与决策。DataWorks构建庞大的数据生态体系,涵盖结构化、半结构化及非结构化数据。知识图谱如同智能导航灯塔,将分散的数据编织成紧密的知识网络。以互联网广告行业为例,DataWorks收集用户浏览、广告投放等数据,通过知识图谱关联,揭示用户与广告主、创意间的复杂关系。
146 5
|
8月前
|
人工智能 Rust PyTorch
Hibiki:实时语音翻译模型打破语言交流障碍!支持将语音实时翻译成其他语言的语音或文本
Hibiki 是由 Kyutai Labs 开发的实时语音翻译模型,能够将一种语言的语音实时翻译成另一种语言的语音或文本,支持高保真度和低延迟。
823 18
Hibiki:实时语音翻译模型打破语言交流障碍!支持将语音实时翻译成其他语言的语音或文本
|
8月前
|
人工智能 自然语言处理 算法
DeepSeek vs ChatGPT:AI对决中的赢家是……人类吗?
DeepSeek VS ChatGPT:DeepSeek以开源黑马姿态崛起,凭借低成本、高性能的「DeepSeek-V3」和专为深度推理设计的「DeepSeek-R1」,成为中小开发者的首选。而ChatGPT则较贵。 然而,AI依赖也带来隐忧,长期使用可能导致记忆衰退和“脑雾”现象。为此,推荐Neuriva解决方案,专注力提升30%,记忆留存率提升2.1倍,助力人类在AI时代保持脑力巅峰。 DeepSeek赢在技术普惠,ChatGPT胜于生态构建,人类的关键在于平衡AI与脑力健康,实现“双核驱动”突破极限!
684 7