课时13:可变对象

简介: 可变对象是指其值可以在创建后被修改的对象。每个对象包含三个属性:Id(标识)、Type(类型)和Value(值)。其中,只有Value是可变的。例如,列表是典型的可变对象,可以通过索引修改其元素。通过代码演示和图示,本文详细解释了如何区分修改对象与修改变量的区别及其影响。修改对象时,所有指向该对象的变量都会受到影响;而修改变量则仅影响该变量本身,不会影响其他变量。总结来说,赋值操作通常修改变量,而通过索引或方法修改内容的操作则修改对象。

可变对象

 

摘要 

1.可变对象的定义与组成

2.列表演示

3.列表中的对象与变量

 

01.可变对象的定义与组成

1.1可变对象的定义与组成

可变对象指的是对象的值可变。

每个对象中都保存了三个数据:Id(标识)Type(类型)Value(值)

先回顾一下之前画的图:

image.png

图中 Id Type 的对象是不可变的,唯一能改变的是 Value,但是仅限于是可变对象。像数字、字符串、Bool 值等的 Value 值是不可变的,但是可变对象是可以改变的,比如列表就是一个可变对象。

 

02.列表演示

 

2.1列表演示

列表是一个可变对象。

a=[1,2,3]

例如,a=[1,2,3]用图体现出来,如下:

a 是变量,[1,2,3]是 a 的对象,对象需要在内存里专门开辟出一块区域去保存这个对象。

先插入一块儿区域,在该区域里设置三个数据,IdTypeValue

Id 假设为0x111Type 类型为 Class List,因为是一个列表。

Value 为[1,2,3]。如下图:

image.png

这里 Value 属于简写了,若详细去写,结构会稍复杂一些。先用这种结构方式来变现一下。变量 a 里有保存它的 Id 地址,所以第一个值是 0x111,就相当于变量里有一个指针指向内存对象。如图:

image.png

图中 Value 的值是可变的。

 

03.列表中的对象与变量

 

3.1修改对象

为体现出可变对象,现在做一个代码演示一下:

a=[1,2,3]
a[0]=10

这个时候再执行,如下:

image.png

再次用图演示,这里把索引为 0 的值改为了 10 ,这里通过变量找到对象修改了对象当中索引为 0 的那个值,所以这里改的是 Value=[10,2,3]这个位置。因为对象 Value 值被改变了,所以这就是可变对象。

image.png

可变对象指的是对象里的 Value 可以被改变。

 

3.2修改变量

如果直接写:

a=[4,5,6]
a
[4,5,6]

这两种方式是不一样的,因为

image.png

这种方式是在修改对象,而

image.png

这种方式是直接改这个变量。

如果写的是 a=[4,5,6],实际上这个是一个新的列表,既然是新的列表那么就要创建新的对象。那么在内存里就应该这样体现的,新的对象改一个新的地址,Id为0x211,那么 a 里面的值变为 0x211,如图:

image.png

这个 a=[4,5,6]操作并没有对 a=[10,2,3]产生影响,因为现在是创立的一个新的对象,然后赋值给a。

 

3.3改对像和改变量的作用

a[0]= 10(改对象)

这个操作是在通过变量去修改对象的值所以这种操作不会改变变量所指向的对象当去修改对象时,如果有其他变量也指向了该对象,则修改也会在其他的变量中体现

a=[456](改变量 )

这个操作是在给变量重新赋值这种操作会改变变量所指向的对象

为一个变量重新赋值时,不会影响其他的变量

 

3.4改对像和改变量的区别

接下来演示二者区别:

#可变对象
a = [1,2,3]
print( ' 修改前: ', a  ,id(a))

紧接着执行,如图:

image.png

接下来继续添加:

# 通过索引修改列表

a[0]= 10

print( ' 修改: 'a  id(a))

再次执行如图:

image.png

这时会发现 Id 并没有改变。只是对象里的值变了,对象不变。所以通过索引修改的,它是在修改对象。

#为变量重新赋值
a=[4,5,6]
print( ' 修改后: ', a  ,id(a))

image.png

执行后发现 Id 改变,值发生改变,但生成的是一个新的对象。

所以,改对象的时候,变量中保存的内存地址是不会变的。而在改变量的时候它实际上是给变量重新赋值了。

 

3.5改对象与改变量的影响

l 用代码演示

a=[1,2,3]
b=a
print(“a”, a, id(a))
print(“b”, b, id(b))

编译执行后,如图:

image.png

接下来添加一步,b[0]=10,通过索引把 0 改成 10,如下:

a=[1,2,3]
b=a
b[0]=10
print(“a”, a, id(a))
print(“b”, b, id(b))

编译执行后,如图:

image.png

结论:当我们去修改对象时,如果有其他变量也指向了该对象,则修改也会在其他的变量中体现

l 用图演示

为更好的理解这个结论,可以通过下面的图来体现:

当a=[1,2,3],b=a时,ab指向的是同一个对象。

现在通过索引 0 来修改对象值,修改后,a b 还是同一个指向。

image.png

接下来直接将 b=[10,2,3],如下所示:

a=[1,2,3]
b=a
b=[10,2,3]
print(“a”, a, id(a))
print(“b”, b, id(b))

这个时候 a 不变,因为在给变量重新赋值的时候,是不会影响其他变量的。

将上述代码编译执行后,如图:

image.png

这时的 Id 不一样了。

结论:为一个变量重新赋值时,不会影响其他的变量。可以通过下面的图来体现:

当 a=[123],b=ab=[1023]时,说明 b=[1023]是一个新的列表,那么新的列表就意味着要创建一个新的对象。

image.png

这个操作不会对 a 有任何影响,因为我们是在给 b 变量重新赋值,对 a 没有影响。如果改对象的时候就会影响了,但是现在改对象影响不了,因为现在是属于两个对象了。

所以,改对象的时候如果别的变量也指向这个对象,会对那些变量也产生影响。而改变量是只影响本身,不会影响到其他变量。

 

3.6如何区别是改对象、改变量

一般只有在为变量赋值时才是修改变量,其余的都是修改对象

例如:一般看到(a=…)之类的是改变量,而(a[..]=…)之类的大部分都是改对象。

相关文章
|
2月前
|
人工智能 Linux API
完整版OpenClaw(龙虾)安装与使用指南|阿里云+本地全平台部署+千问/Coding Plan配置+Skills接入教程
OpenClaw(圈内昵称“龙虾”)是2026年最受关注的开源自动化AI智能体框架,凭借**本地优先、自动执行、长期记忆、主动干活**四大核心能力,彻底区别于传统被动式聊天AI。它可以自主操作浏览器、控制桌面、执行任务、7×24小时运行,并通过向量记忆越用越懂你,真正成为能帮你创造收益、节省时间的数字员工。
2905 5
|
存储 安全 关系型数据库
AWS介绍
AWS介绍
915 0
|
Web App开发 缓存 数据安全/隐私保护
如何利用系统内存盘提升你的浏览器上网速度
内存盘这个东东大家应该都知道,内存的读写速度要远远高于硬盘,而我们日常上网浏览器都缓存在硬盘,为了进一步加速,内存盘这个东东就诞生了,虚拟内存大家应该都知道,就是把硬盘的一部分空间划分给内存使用,而内存盘恰恰相反,就是把内存划分出来创建一个新的盘符,这个分区的读写速度极高,大家可以吧日常上网的缓存文件丢进去,例如QQ和浏览器的缓存,今天和大家分享的是软媒魔方的一个小工具,叫做魔方内存盘,如果已经安装过魔方电脑大师的童鞋直接开启此功能就行了,没有的话也没关系,本站制作了单文件版,大小只有271kb,大家下载后即可使用。
|
存储 机器学习/深度学习 Kubernetes
kubeflow系列:基于国内阿里云镜像解决kubeflow一键安装
google出品在国内都存在墙的问题,而kubeflow作为云原生的机器学习套件对团队的帮助很大,对于无条件的团队,基于国内镜像搭建kubeflow可以帮助大家解决不少麻烦,这里给大家提供一套基于国内阿里云镜像的kubeflow 0.6的安装方案。
9993 0
kubeflow系列:基于国内阿里云镜像解决kubeflow一键安装
|
数据可视化
GTD时间管理模型是什么
本文介绍GTD(Getting Things Done)时间管理方法,通过收集、整理、组织、回顾、执行五个步骤,帮助你清空大脑内存,减轻焦虑,提升专注力和生产力,轻松应对挑战,改善工作和生活质量。
483 7
GTD时间管理模型是什么
|
前端开发 安全 关系型数据库
秒合约系统/开发模式规则/技术架构实现
秒合约系统是一种高频交易平台,支持快速交易、双向持仓和高杠杆。系统涵盖用户注册登录、合约创建与编辑、自动执行、状态记录、提醒通知、搜索筛选、安全权限管理等功能。交易规则明确,设有价格限制和强平机制,确保风险可控。技术架构采用高并发后端语言、关系型数据库和前端框架,通过智能合约实现自动化交易,确保安全性和用户体验。
|
缓存 数据处理 Python
python读取文件到缓存
python读取文件到缓存
410 2
|
IDE 编译器 开发工具
学习STM32,该用哪款开发工具?
学习STM32,该用哪款开发工具?
624 1
|
JavaScript Java PHP
主流开发语言和开发环境介绍
主流开发语言和开发环境介绍
506 0