【Python】python中可变对象和不可变对象

【Python】Python 可变对象和不可变对象 文章目录Python 变量Python 对象不可变对象可变对象什么是赋值引用?什么是浅拷贝(copy)?什么是深拷贝(deepcopy)?Python 参数传递是值传递还是引用传递?举个栗子????不可变对象\_外部永远不随内部变可变对象\_外部跟随内部变可变对象\_外部不随内部变 Python 变量 在 Python 中,变量都是指针;指针的内存空间与数据类型无关,其内存空间保存了指向数据的内存地址。 flowchart LR classDef varClass fill: #E6E6FA 阅读详情

一、定义:

  1. 可变对象:当有需要改变对象内部的值的时候,这个对象的id不发生变化。

  2. 不可变对象:当有需要改变对象内部的值的时候,这个对象的id会发生变化。

二、可变对象

可变对象包括:字典(dict), 集合(set), 列表(list)。 此可变对象会与浅拷贝和深拷贝有很大的联系, 看上一篇博客。

以列表为例子如下图所示, 对 a_list 的修改就不会改变a_list的id:
在这里插入图片描述
二、不可变对象
不可变对象包含 整型(int), 字符串(string), 浮点型(float), 元组(tuple)
五个场景看清不可变对象在python中的端倪:

场景1: int值比较小时,值一样的变量id就一样,值变化id就变化。
在这里插入图片描述
场景2: int 值比较大时,值一样的变量id也不一样,值变化id就变化。
在这里插入图片描述

场景3: float 值一样的变量id也不一样,值变化id就变化
在这里插入图片描述
场景4: tuple 值一样的变量id也不一样
在这里插入图片描述
场景5: 单词类型的 str 类型的值一样的变量id都相同,值变化的id就变化
在这里插入图片描述
非单词类型的 str 类型的值一样,id不同
在这里插入图片描述

由这些现象说四个内部实现:

int 类型解析

较小的整数会很频繁的被使用,所以python将这些对象放置到了一个池子中,每次需要这些对象的时候就到池子中获取这个值,避免多次的重复创建对象引起的许多不必要的开销。这个池子内的数字范围是[-5, 257), 所以都是从池子里面取值,自然id不变。

float类型解析

对于float类型的使用自然没有int那么频繁,并且float类型也不好定义哪些常用,也就没有池子给到这个类型,所以每次重新创建即可。

tuple类型解析

对于tuple类型,与float类型的思维相似,所以也是每次重新创建。

string类型解析

单词类型的str由于被重复使用的概率比较大,所以在python中为单词类型的str做了一个缓存,也就是说如果是单词类型的str, 会被存储到一个字典(dict)中,字典的内容是字符串为key, 地址为value。当有一个字符串需要创建,就先去访问这个字典,如果存在则返回字典中字符串的地址,如果不存在,则返回新创建的地址,并将这个字符串添加进入字典。这是字符串的intern机制。

参考:
https://www.jianshu.com/p/b3157c9751d0

Python基础:Python可变对象和不可变对象 Python在heap中分配的对象分成两类:可变对象和不可变对象。所谓可变对象是指,对象的内容是可变的,例如list。而不可变的对象则相反,表示其内容不可变。 不可变对象:int,string,float,tuple可变对象   :list,dictionary 一、不可变对象 由于Python中的变量存放的是对象引用,所以对于不可变对象而言,尽管对象本身不可变,但变量的对象引用 阅读详情

相关推荐

从零开始之stm32之CAN通信

CAN通信极简教程(小白友好版),从小白的视角了解并实现简单的STM32F103的CAN通信,直接上手。

qq_30993593的博客 1309

Python 可变对象与不可变对象

Python 可变对象与不可变对象

关于我的学习记录 2684

ROS2与Gazebo协同实现多机器人避障仿真

本文详细介绍了如何利用ROS2与Gazebo协同搭建多机器人避障仿真环境。通过创建SDF机器人模型、编写多机器人启动文件以及集成基础避障算法,构建了一个低成本、高效率的虚拟测试平台,为AGV编队、机器人集群等项目的算法验证与迭代提供了完整解决方案。

weixin_29065659的博客 298

Python:可变对象、不可变对象、迭代器可迭代对象

Python:可变对象、不可变对象、迭代器可迭代对象

在夜里,所有人都会失去年龄。 2128

使用DeepSeek、MCP和AKShare实现智能金融问答系统技术方案

DeepSeek是由深度求索公司开发的大规模语言模型,最新版本DeepSeek-V3采用混合专家(MoE)架构,拥有671B参数,激活37B参数,在多项基准测试中表现优异3。要使用DeepSeek的API服务:访问DeepSeek平台注册账号获取API Key(形如AKShare是基于Python的金融数据接口库,提供股票、基金、期货、宏观经济等领域的海量数据。主要特点包括:免费开源,数据源丰富支持多种数据格式(DataFrame/JSON)持续更新维护安装命令。

Kin 3174

数据驱动的老年人健康管理与生活品质提升实践研究

摘要 全球人口老龄化趋势显著,2025年65岁以上人口预计达8.57亿,中国老年人口已突破3亿。老年人健康挑战突出,75%以上患慢性病,且独居老人心理健康与应急需求迫切。数据驱动的健康管理通过智能设备(如跌倒检测、远程监测)和AI技术(如疾病预测算法)提升效率,改善生活品质。研究提出差异化需求解决方案,如慢性病患者的持续监测与用药管理,高龄老人的综合护理服务,并探讨政策与商业模式以推动智慧养老产业发展,2024年市场规模已达6.8万亿元。

聚焦程序设计语言理论与前沿技术落地,拆解代码世界的底层逻辑,探索语言设计的 “创造与沟通” 之道。从编译原理、类型系统到 AI 技术在金融、医疗、制造、养老、大健康等领域的实战案例,分享硬核技术干货与工程化思考。 1632

Python中的可变对象和不可变对象详解

在Python中,每个变量都是一个对象,每个对象都具有其创建后是否允许修改的属性,这种特性称为对象的可变性。它影响对象在传递给函数、用于表达式或存储在数据结构中时的行为。定义可变对象:创建后可以改变的对象。例子包括列表、字典、集合和用户定义的对象。不可变对象:一旦创建后不允许被修改的对象。例子包括整数、浮点数、字符串、元组和冻结集合。

lph159的博客 4855

Vanna 2.0:基于LLM的智能文本到SQL框架,实现企业级数据查询与权限控制

文本到SQL技术是自然语言处理与数据库交互的重要桥梁,它允许用户使用日常语言直接查询数据库,无需编写复杂的SQL语句。其核心原理是利用大语言模型理解用户意图,并结合检索增强生成技术,将自然语言问题转换为准确的结构化查询语言。这项技术的价值在于大幅降低了数据访问门槛,提升了业务人员的数据自助分析能力,并能在金融分析、销售报表、运营监控等场景中实现实时数据洞察。Vanna 2.0作为一个开源框架,通过引入用户感知的智能体架构和行级安全策略,解决了企业级应用中的多租户数据隔离与权限控制等关键问题,使得自然语言数据

weixin_42629522的博客 546

Python中对象可变的(mutable)和不可变的(immutable)介绍

Python中对象可变的(mutable)和不可变的(immutable)介绍

cnds123的专栏 3204

ANSYS Maxwell:创建即用型 3D 轴向磁通电机模型

Magnet Length” 是磁体的径向长度。“Magnet Thickness” 是磁体的轴向长度。为了对 AFM 进行更详细的分析,用户需要在 ANSYS Maxwell 中运行 3D FEA 分析。对于 2D 模型,它们类似于 MotorCAD 中的模型,后者对等效的直线电机进行建模。单击“确定”后,将创建一个 3D Maxwell 模型。“长度”是转子铁的轴向长度。然后需要定义定子的“磁芯”尺寸和材料。“长度”是定子铁芯的轴向长度。“转子”# 的极数必须与“定子”中定义的磁极相同。

jkh920184196的博客 1932

PyTorch实战(19)——变分自编码器(Variational Autoencoder,VAE)

变分自编码器 (Variational Autoencoder, VAE) 是一种结合了自编码器和概率建模的生成模型,通过编码器将输入数据映射到潜在空间中的概率分布,并通过解码器将从潜在空间采样得到的潜在变量映射回原始数据空间,实现了数据的生成和特征学习。本节中,将介绍变分自编码器的基本概念,并使用 PyTorch 实现变分自编码器生成新图像。

盼小辉丶的博客 2919

【python学习笔记】 可变对象和不可变对象详解

复习一下python 基础数据结构,大家一起多多交流,互相学习啊! Python在heap(堆:程序员自己分配释放)中分配的对象分成两类:可变对象和不可变对象。所谓可变对象是指,对象的内容可变,而不可变对象是指对象内容不可变 python中,万物皆对象

南城果宝的满腹经纶 2311

【错误解决】本地计算机上的mysql服务启动停止后,某些服务在未由其他服务或程序使用时将自动停止

转载请注明出处:http://blog.youkuaiyun.com/qq_26525215 本文源自【大学之旅_谙忆的博客】 在启动mysql服务时出现该错误: 本地计算机上的mysql服务启动停止后,某些服务在未由其他服务或程序使用时将自动停止。mysql 版本 5.7.14 系统 win 7后来经过一系列的百度,谷歌,总算是解决了。首先,你需要把原来的服务删除:mysqld --remove mysq

谙忆-陈浩翔 12万+

Python中可变对象和不可变对象

之前写了FPGrowth的代码,写得非常恶心,觉得和C语言、C++的工程文件很不相同。其中就有关于传引用、传值的疑问。截一段Leetcode的代码这题好像是Leetcode 93附近的一道 获得二叉树最大深度的题目。我使用了dfs,本来以为python是传对象引用的,所以在dfs中更新了ans,那么返回的ans也会改变,但是最后得到的结果保持1。经过查看资料我就知道这和命名域以及可变对象和不可变对象

Mr.Phoebe的专栏 5023

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

python可变对象和不可变对象

   Python 在 heap 中分配的对象分成两类:可变对象和不可变对象。所谓可变对象是指,对象的内容是可变的,例如 list。而不可变的对象则相反,表示其内容不可变,例如常量7。 不可变对象 :int,string,float,tuple -- 可理解为C中,该参数为值传递 可变对象 :list,dictionary -- 可理解为C中,该参数为指针传递 一、不可变对象 由于 Python 中的变量存放的是对象引用,所以对于不可变对象而言,尽管对象本身不可变,但变量的对象

weixin_45074568的博客 2831

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

python中不可变对象_浅谈Python中的可变对象和不可变对象

什么是可变/不可变对象不可变对象,该对象所指向的内存中的值不能被改变。当改变某个变量时候,由于其所指的值不能被改变,相当于把原来的值复制一份后再改变,这会开辟一个新的地址,变量再指向这个新的地址。可变对象,该对象所指向的内存中的值可以被改变。变量(准确的说是引用)改变后,实际上是其所指的值直接发生改变,并没有发生复制行为,也没有开辟新的出地址,通俗点说就是原地改变。Python中,数值类型(int...

weixin_39658474的博客 166

Python中的可变对象和不可变对象

0 什么是可变/不可变对象 不可变对象,该对象所指向的内存中的值不能被改变。当改变某个变量时候,由于其所指的值不能被改变,相当于把原来的值复制一份后再改变,这会开辟一个新的地址,变量再指向这个新的地址。 可变对象,该对象所指向的内存中的值可以被改变。变量(准确的说是引用)改变后,实际上是其所指的值直接发生改变,并没有发生复制行为,也没有开辟新的出地址,通俗点说就是原地改变。 Python中,数值类...

Lavi的专栏 1071

python可变对象 不可变对象_【Python】可变对象和不可变对象

在 Python 中一切都可以看作为对象。每个对象都有各自的 id, type 和 value。id: 当一个对象被创建后,它的 id 就不会在改变,这里的 id 其实就是对象在内存中的地址,可以使用 id() 去查看对象在内存中地址。type: 和 id 一样当对象呗创建之后,它的 type 也不能再被改变,type 决定了该对象所能够支持的操作value: 对象的值一个对象可变与否就在于 va...

weixin_39797686的博客 76

python中可变对象、不可变对象的引用、复制及对象的+=和+

文章目录1.对象和对象的引用2.可变对象和不可变对象3.两种对象在内存中的存储3.两种对象更改数值时的内存4.两种对象的赋值和复制不可变对象可变对象5.两种对象的+=和=+6.两种对象的函数传参 今天在看一个递归的时候列表赋值又把我绕晕了,这个点每次看每次忘,所以来总结一下 1.对象和对象的引用 对象:指在内存中存储的数据,每个对象包含一个头部信息,有类型表示符和引用计数器 对象的引用:是一个变...

虎哥的铲屎员 694

Python札记3:可变对象和不可变对象

Python中有可变对象和不可变对象之分。可变对象创建后可改变但地址不会改变,即变量指向的还是原来的变量;不可变对象创建之后便不能改变,如果改变则会指向一个新的对象。 Python中dict、list是可变对象,str、int、tuple、float是不可变对象。 本文只介绍list和str,其他的同理。 字符串 来看一个字符串的例子: >>> a = "hello" >&...

请叫我AXin 729

Python - 可变和不可变对象

前置知识 在 Python 中,一切皆为对象 Python 中不存在值传递,一切传递的都是对象的引用,也可以认为是传址 有哪些可变对象,哪些不可变对象? 不可变对象:字符串、元组、数字(int、float) 可变对象:数组、字典、集合 不可变对象和可变对象的区别? 可变对象:改变对象内容,对象在内存中的地址不会被改变 不可变对象:改变对象内容,对象在内存中的地址会被改变;如果必须存储一...

qq_33801641的博客 303

python中不可变对象有哪些_浅谈Python中的可变对象和不可变对象

搜索热词什么是可变/不可变对象不可变对象,该对象所指向的内存中的值不能被改变。当改变某个变量时候,由于其所指的值不能被改变,相当于把原来的值复制一份后再改变,这会开辟一个新的地址,变量再指向这个新的地址。可变对象,该对象所指向的内存中的值可以被改变。变量(准确的说是引用)改变后,实际上是其所指的值直接发生改变,并没有发生复制行为,也没有开辟新的出地址,通俗点说就是原地改变。Python中,数值类型...

weixin_42151305的博客 1973

Python基础之可变对象和不可变对象

Python基础之可变对象和不可变对象 ​ 前面学习了str,list,tuple,dict,set五种数据类型,其中list为可变对象,tuple,dict中的key,set中的 元素都是不可变对象,下面对可变对象和不可变对象再进行一次演示。 1. 核心知识点: ​ 对可变对象进行操作,比如list,对象内部是会变化的; ​ 对不可变对象进行操作,比如字符串,对象内部是没有变化的,只是在内存空间中生成了新的对象; 2. 测试代码 #可变对象list >>> L1 = [2,3,5,

姚潇锋的博客 322

python可变对象与不可变对象_python中可变对象和不可变对象有什么区别

python中有可变对象和不可变对象,可变对象:list,dict.不可变对象有:int,string,float,tuple。python不可变对象int,string,float,tuple先来看一个例子def int_test():i = 77j = 77print(id(77)) #140396579590760print('i id:' + str(id...

weixin_39783633的博客 119

python中深浅拷贝以及可变对象和不可变对象

浅拷贝会复制对象本身及其直接引用的对象,但不会递归复制所有嵌套对象。深拷贝会递归复制对象及其所有嵌套对象,保证原始对象和拷贝对象的完全独立性。

2402_88219100的博客 797
上一篇: 【Python】Python中直接赋值、浅拷贝和深度拷贝学习总结
下一篇: 【CV】图像分类中的max pooling和average pooling区别
机器不学习我学习
机器不学习我学习 优质创作者: 人工智能技术领域 优质创作者: 人工智能技术领域 领域专家: 数据科学与机器学习技术领域 领域专家: 数据科学与机器学习技术领域
博客等级 码龄8年 3万+粉丝 485原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

机器不学习我学习

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值