Python中变量的本质探索

参考:Vamei博客Python进阶09 动态类型

'''
a = [1,2,3]
'''
(1)这条“赋值语句”实际上是将a指向对象“[1,2,3]”,对象“[1,2,3]”是存储在内存中的实体,而a仅仅是指向这一对象的引用(reference)。a相当于一个对象地址存储器,即C语言中的指针,指向不同的对象,指针指向变化时,原对象不发生变化。引用和对象分离,是动态类型的核心。

(2)同样,给引用赋不同的值,仅仅是将其调整不同的指向,并不改变原对象的内容。 而,变量之间的值交换,也只是将被赋值的变量的指向更改。

(3)可变数据对象(mutable bject)和不可变数据对象(immutable object)
是否可以通过引用改变对象本身。
如,对于列表和词典,可以通过引用修改存储实体,称为可变数据对象。而,数字、字符串元组仅能调用对象,不能修改,称为不可改变数据对象。

对于(2)中提到的,仅适用与不可改变对象;对于可变数据对象,因为直接修改的是存储实体,所以所有指向该实体的引用的内容都会发生变化。

以上问题,还涉及到函数的参数传递问题:如果传递的是可变数据对象,那么函数体内可以修改存储实体,对等于C语言中的地址传递;如果传递的是不可变数据对象,那么传递的是引用,函数体内不能修改实体。编程时,切切注意,如直接传递列表,可能会导致列表内容发生改变,如果要保证其不发生变化,可以考虑用元组做传递参数。

(4)总结:python中的变量实质上是指向存储实体的指针(引用reference),对变量赋值,仅仅是改变其引用方向;对于可变数据对象,通过变量引用,可分次可以局部改变存储实体中的内容。并且,不可变对象的地址是共享的,即其在内存中唯一存在;而对可变对象,每次创建均会分配新的地址。不可变对象传递时,相当于传递的是值;可变对象传递时,相当于传递的是指针。

转载于:https://www.cnblogs.com/HZL2017/p/9332394.html

Python中变量的本质探索相关推荐

  1. python中变量的作用域有几种_Python中变量的作用域(variable scope)

    http://www.crifan.com/summary_python_variable_effective_scope/ 解释python中变量的作用域 示例: 1.代码版 #!/usr/bin/ ...

  2. python中变量,python中变量的概念

    python中变量的概念 在python中,变量就是一种标识符, 它是数据的名字,更专业的理解,变量是内存中数据的引用, 编程语言里的变量和初中学习代数时的方程变量很相似. 前面学习数字类型,bool ...

  3. python有效变量名banana,python中变量名

    Python中变量名后面加冒号是什么意思? def func(z,arg2=''): a:z=None print(a) x=func('22','3') #print出来这是Python 3.5中引 ...

  4. Python中变量名与变量值的关系

    在Python中变量名与变量值的只是绑定关系如图,变量名只是一个标识符与变量值绑定在一起而已 转载于:https://www.cnblogs.com/liuxiaowei/p/7163470.html

  5. python中变量作用域

    python中变量作用域采取以下规则: 1.python能够改变变量作用域的代码段是def.class.lamda. 2.if/elif/else.try/except/finally.for/whi ...

  6. python赋值语句对错_深入理解Python中变量赋值的问题

    前言 在Python中变量名规则与其他大多数高级语言一样,都是受C语言影响的,另外变量名是大小写敏感的. Python是动态类型语言,也就是说不需要预先声明变量类型,变量的类型和值在赋值那一刻被初始化 ...

  7. python中变量不需要事先声明_第二章 Python 变量

    2.1  Python变量 在 Python 中变量不需要事先声明变量名及其类型,直接赋值即可创建各种变量(不要使用关键字为变量名),例如: >>>x = 4 >>> ...

  8. python中变量怎么使用_python中变量怎么使用

    Python中的变量主要是用来存贮信息的.message = "Hello Python world!" print(message) 一个变量存储一个值.你可以在任何时候改变这个 ...

  9. python中变量的地址引用和拷贝

    python中变量的地址引用和拷贝 最近在自学python,看官方文档的时候被copy弄懵了,所以恶补了一下关于变量到底是怎么回事的知识,总结一下自己思考和参考其他文章的内容,此篇作为备忘录(岁数大了 ...

最新文章

  1. 数据蒋堂 | 大数据集群该不该透明化?
  2. gen already exists but is not a source folder
  3. MySQL left()函数
  4. WPF学习笔记一 依赖属性及其数据绑定
  5. 因为项目管理知识体系指南(PMBOK)初识宝地
  6. 我的web2.0作品:畅想网络应用系统(采用JavaScript、Jquery、Ajax 等制作,完成时间10天)...
  7. React学习笔记—JSX
  8. DOS 下修改ip 地址
  9. API Guides Contacts Provider (三)
  10. 怎样让计算机加快速度,六大招教你把旧电脑恢复如新,速度提升N倍!-怎么让电脑速度变快...
  11. Uber面向中印开发者公布SDK,支持第三方应用集成服务
  12. 转载:mac下开启hidpi三种办法
  13. 晶品特装在科创板上市:总市值约为48亿元,前三季度收入下滑12%
  14. YoLov3目标检测代码C++版本运行
  15. 组图:码头上的搬运工
  16. java 用Apache Commons Email发邮件
  17. 工业制造中PHM的云架构
  18. 利用FingerprintJS做浏览器指纹的实现方案
  19. cesium加载GeoJSON
  20. tiny4412 lcd驱动

热门文章

  1. bluetooth记录
  2. JavaScript异步编程原理
  3. 《硝烟中的Scrum和XP》学习手札
  4. ASP.NET画图全攻略(上)
  5. java中错误的源文件_如果我的Java源文件中存在语法错误,为什么Eclipse会生成.class文件?...
  6. vue 前端设置允许跨域_[web]记一次sanic+vue跨域问题
  7. android黑屏日志_Android启动页黑屏的解决方案
  8. Spring Cloud整合Nacos实现动态配置
  9. PostgreSQL体系结构之物理结构
  10. java实现字块反转_java实现字符串反转