一. 问题的提出

我们先来看两个对比

第一道题,当对象为整数时,最终结果:b = 2, a = 1,b的变化没有引起a的变化

第二道题,当对象为字典时,最终结果:a = {“name”:“jack”,“age”:27}, b = {“name”:“jack”,“age”:27},b的变化引起了a的变化

那么,为什么上述两道题的结果会有如此大的区别呢?我们就来了解一下可变数据类型和不变数据类型

二. 可变数据类型和不可变数据类型

  • 可变数据类型有:列表list、字典dict
  • 不可变数据类型有:整型int、浮点型float、字符串string和元组tuple

python中有一个id()函数,可用来获取对象的内存地址,我们针对第一题,可以看一下a和b指向的对象的内存地址有什么变化

我们可以清晰的看到,a = 1, b = a,这两个操作中,变量a和b指向的对象的内存地址是一样的,也就是说a和b其实引用了同一个对象1。那为什么整型是不可变数据类型呢?这里可以理解为a和b的引用地址处的值是不能被改变的,也就是1814284368地址处的值在没被垃圾回收之前一直是1,不能改变,如果把b赋值为2,那么,只能把b的引用地址从1814284368变为1814284400,相当于b += 1这个赋值又创建了一个新的对象2,然后变量a仍然指向对象1,而变量b指向了对象2,变量b的变化并不会引起a的改变,因为它们指向的是不同的对象

我们大概画个演示图:

图一:a = 1, b = a

图二: b += 1

我们再来看字典,先用id()看一下内存地址的变化

可以看到,变量a和b同时指向一个字典对象,当给变量b指向的字典添加元素后,b指向的字典的内存地址并不会发生变化,也就是说,对b的操作不会改变a引用的地址值,相当于同样一个地址得到了扩充,由于a和b指向同一个地址,所以b的变化会引起a的变化

图一:a = {“name”: “Jack”}, b = a

图二:b[“age”] = 27

转自:一道问题引出的python中可变数据类型与不可变数据类型 - My&Captain - 侵删

goupby 两个值 结果变了_一道问题引出的python中可变数据类型与不可变数据类型...相关推荐

  1. python中遍历结构可以是哪些数据类型_全!Python基础之原生数据类型、判断和循环、函数和文件操作合集...

    长文预警! Python基础系列会将基础内容大致分为三到五个板块,每块着重讲一方面,知识不会很难,主要是以小例子的形式解读,如果你已经入门Python,希望可以帮你温习一下:如果你想入门Python, ...

  2. python应用程序开发者_用 NVIDIA ISAAC-SDK 在 Python 中开发机器人应用程序

    图 1 .使用 Jupyter 笔记本和 ISAAC SDK Python API 在 ISAAC Sim 中控制虚拟机器人. NVIDIA ISAAC 软件开发工具包 的模块化和易于使用的感知堆栈继 ...

  3. python函数如何实现可变参数_【已解决】Python中实现可变参数的函数

    [问题] Python中,希望实现一个可变参数的函数. [解决过程] 相关代码如下:(extractOK, extractedBlogUser, generatedBlogEntryUrl) = ca ...

  4. python关系表达式的结果只有两种值、分别是_关系表达式的结果只有两种值,分别是____和____。...

    [判断题]当盾尾油脂密封在手动位时,不能按下每个位置的注脂按钮来进行手动注脂.( ) [简答题]What is trust? [填空题]Python语言中的运算符有三种,分别是____.____和__ ...

  5. python英语字典程序修改_详解如何修改python中字典的键和值

    我们知道python中字典是无序的,它们都是通过hash去对应的.一般的如果我们需要修改字典的值,只需要直接覆盖即可,而修改字典的键,则需要使用字典自带的pop函数,示例如下: t = {} t['a ...

  6. python中两个集合的运算并交补_三种方式实现 Python 中的集合的交、并、补运算...

    文章目录 三种方式实现 Python 中的集合的交.并.补运算 一 背景 集合这个概念在我们高中阶段就有所了解,毕业已多年,我们一起回顾一下几个集合相关的基本概念吧? 集合是指具有某种特定性质的具体的 ...

  7. python字典修改键所对应值_详解如何修改python中字典的键和值

    我们知道python中字典是无序的,它们都是通过hash去对应的.一般的如果我们需要修改字典的值,只需要直接覆盖即可,而修改字典的键,则需要使用字典自带的pop函数,示例如下: t = {} t['a ...

  8. python pdb查看变量值_使用pdb模块调试Python

    在Python中,我们需要debug时,有三种方式: 加log语句.最简单的方式是添加print()语句来输出我们想要获知的状态或者变量,好处是简单容易操作,坏处是debug完了之后,还需要将prin ...

  9. python变量必须以字母和下划线_【转载】关于python中带下划线的变量和函数的意义...

    Python 的代码风格由 PEP 8 描述.这个文档描述了 Python 编程风格的方方面面.在遵守这个文档的条件下,不同程序员编写的 Python 代码可以保持最大程度的相似风格.这样就易于阅读, ...

最新文章

  1. matlab optimvar
  2. 关于如如何运行tensorrt
  3. 通过lseek产生空洞文件
  4. where is SAP CRM One Order event callback registered
  5. 正则表达式 学习笔记4.3
  6. python核心模块之pickle和cPickle讲解
  7. 贴出一个php的批量搜索吧
  8. 移动互联网和Android给你带来的机会[轉]
  9. 最新全国暴雨强度公式2019_2019-2020最新全国高中排名
  10. Bailian3177 判决素数个数【入门】(POJ NOI0113-10)
  11. LNMP详解(二)——Nginx源码安装与启动
  12. mybatis与spring集成
  13. python爬虫语句_Python爬虫练手之爬句子迷
  14. Datawhale学习笔记【阿里云天池 金融风控-贷款违约预测】Task2 数据分析
  15. hadoop dremel Caffeine Pregel
  16. Open-set Adversarial Defense with Clean-Adversarial Mutual Learning
  17. [读书笔记]Core Java: Volume I - Fundamentals Chapter 1
  18. 百战终破黄金甲,不破楼兰终不还!
  19. “问天号”已就位!喻京川2013年畅想的《中国空间站》,即将启航星辰大海!...
  20. 生物工程学蛋白功能预测_海水中生长的工程细菌产生丝蛋白

热门文章

  1. BSP print implemented in BSPWD_BASICS print.htm
  2. use putty to log on OS
  3. 删除context node后遗留的问题
  4. Code Issues 2,637 Pull requests 0 Projects 1 Wiki Security Insights Settings 使用filter node快速找到XML f
  5. Spring MVC原理学习之how is return type handled
  6. SAP CRM Contact和Account的从属关系
  7. 使用HANA Web-based Development Workbench创建最简单的Server Side JavaScript
  8. java 字符表 chr3,VBS CHR码值对应列表
  9. c语言整数与平均值,编写求一组整数的和与平均值的程序
  10. 最长连续序列Python解法