Python中的变量、对象
由于没时间系统学习下Python
只能见一个问题探究一个问题了
一、初级 - 对象
关于Python中的数据类型,今天重新认识了下。【参考】
首先,Python中,对象才有类型, 变量是没有类型的,它只是对象的“引用”。
其次,Python中对象被分为两类:可更改对象和不可更改对象(包括numbers, strings, tuples)。
a = 1 #一个指向int数据类型的a(再次提醒,a没有类型) list_a = [1] #一个指向list类型对象的list_a ,这个list中包含一个int对象1 a = 2 # a指向一个新的int对象,其值为2。内存中原始的1对象因为不能改变,于是被“抛弃” list_a[0] = 2 #list_a指向的list类型对象的第一个元素指向一个新的int对象,原来的对象1被抛弃。
因此,Python中的函数参数传递也分为两类:
1.不可变对象参数调用
def ChangeInt( a ):
a = 10
nfoo = 2
ChangeInt(nfoo)
print nfoo #结果是2
2.可变对象参数调用
def ChangeList( a ):
a[0] = 10
lstFoo = [2]
ChangeList(lstFoo )
print lstFoo #结果是[10]
二、进阶 - 拷贝
先理解深浅拷贝的概念:
浅拷贝
- 所谓的浅拷贝就是拷贝指向对象的指针,意思就是说:拷贝出来的目标对象的指针和源对象的指针指向的内存空间是同一块空间.
- 浅拷贝只是一种简单的拷贝,让几个对象公用一个内存,然而当内存销毁的时候,指向这个内存空间的所有指针需要重新定义,不然会造成野指针错误
深拷贝
- 所谓的深拷贝指拷贝对象的具体内容,其内容地址是自助分配的,拷贝结束之后,内存中的值是完全相同的,但是内存地址是不一样的,两个对象之间相互不影响,也互不干涉.
认真理解 图解Python深拷贝和浅拷贝 中的例子,应该就可以进阶了我猜
1.对象赋值, wilber = will ,之后只要通过will改动其所指向的对象中的元素,wilber所指的对象中的元素就会随之改变;反之(通过wilber进行改动)亦然。
·但如果will指向的是不可更改对象,那么will的改动只会让它自己指向新的内存,而wilber不会改变(直接从“赋值”的角度想就可以了)
·如果will指向的是可变更对象,那wilber = will 就相当于是给这个对象起了个“别名”,彼此的改动都互相影响(想起当初的C++了…)
2.浅拷贝,wilber = copy.copy(will),之后通过will改动其所指向的对象中的元素,看被改变的元素是可更改对象还是不可更改对象:
·如果是可更改对象,那wilber所指的对象中的元素随其发生改变;
·如果是不可更改对象,那么wilber不会发生改变(看例子中的图,一目了然)。
反之亦然。
# 其实从这个角度思考更方便明了些,但没上面这种透彻
3.深拷贝,wilber = copy.deepcopy(will),二者之间的改动互不相干(虽然Python的设计是将will和wilber分别所指对象中的可更改对象共享了,但事实上只要改变了这些就会被重新赋值,我猜这只是Python用来节约内存的一个技巧,不要被这个搞混了)。
三、扩展
global关键字 - Python的global语句使用
Python中定义函数时,若想在函数内部对函数外的变量进行操作,就需要在函数内部声明其为global。
在不将函数外的变量指针加入参数列表的情况下,函数想要改变函数外的变量,可考虑使用global关键字
Python中的变量、对象的更多相关文章
- python中的变量对象小结2
# .变量名和数据内容是分开存储的. # .数据保存在内存中的一个位置(地址). # .变量中保存着数据在内存中的地址. # 引用就是变量中记录数据的地址. #不可变变量,重新赋值时会重新开辟一个地址 ...
- Python中的变量引用对象需注意的几点
Python中的变量引用对象需注意的几点 分类:Python (55) (0) 普通引用: Python中,变量的作用仅仅是一个标识,只有赋值后才被创建,它可以引用任何类型的对象,而且在引用之前必须 ...
- python中的变量与对象
一. 什么是变量 变量就是以前学习的数学中常见的等式x = 3(x是变量,3是变量值),在编程中,变量不仅可以是数学,还可以是任意数据类型 二. 变量的命名规则 变量名必须是英文大小写.数字和_的组合 ...
- python学习(九)python中的变量、引用和对象的关系
<Think In Java>中说到过"万事万物皆对象",这句话也可以用在Python中. 感觉Python中的变量有点像Javascript中的变量,是弱类型的,但是 ...
- python中的变量和数据类型
一.变量定义:变量是计算机内存中的一块区域,存储规定范围内的值,值 可以改变,通俗的说变量就是给数据起个名字. 二.变量命名规则: 1. 变量名由字母.数字.下划线组成 2. 数字不能开头 3. 不可 ...
- Python中的变量、引用、拷贝和作用域
在Python中,变量是没有类型的,这和以往看到的大部分编辑语言都不一样.在使用变量的时候,不需要提前声明,只需要给这个变量赋值即可.但是,当用变量的时候,必须要给这个变量赋值:如果只写一个变量,而没 ...
- Python中的可变对象和不可变对象
Python中的可变对象和不可变对象 什么是可变/不可变对象 不可变对象,该对象所指向的内存中的值不能被改变.当改变某个变量时候,由于其所指的值不能被改变,相当于把原来的值复制一份后再改变,这会开辟一 ...
- 《python解释器源码剖析》第4章--python中的list对象
4.0 序 python中的list对象,底层对应的则是PyListObject.如果你熟悉C++,那么会很容易和C++中的list联系起来.但实际上,这个C++中的list大相径庭,反而和STL中的 ...
- Python中repr(变量)和str(变量)的返回值有什么区别和联系
Python中repr(变量)和str(变量)都返回一个描述对象的字符串,二者有关联又有不同.由于Python3.0后都是新式类,我们的分析也是基于新式类进行的.基于object派生的新式类中二者之间 ...
- 【Python核心编程笔记】一、Python中一切皆对象
Python中一切皆对象 本章节首先对比静态语言以及动态语言,然后介绍 python 中最底层也是面向对象最重要的几个概念-object.type和class之间的关系,以此来引出在python如何做 ...
随机推荐
- Delphi 10.3.3最新消息
有朋友说,已经开始内测,预计10月末发版,按最新的路线图,此版本支持iOS 13及Android 64位. 2019-11-18,今天,下载及注册机都来了,快下载安装,试用吧. 需要的话加入QQ群20 ...
- asp.net网站部署在云服务器windows server 2008上
搭建一个网站需要以下4个准备: 1.域名解析 2.(云)服务器 3.数据库 4.网站代码 其中1可以可以去DNSPOD申请,同时需要进行备案,在上面就都可以完成.2用的是阿里云服务器windows s ...
- 使用PHP 格式化时间
date 用法: date(格式,[时间]); 如果没有时间参数,则使用当前时间. 格式是一个字符串,其中以下字符有特殊意义: U 替换成从一个起始时间1970年1月1日以来的秒数 <?php ...
- JavaScript 的基本使用
JavaScript 基本语法要求: 1.JS的写法是严格区分大小写的. 2.标识符的起名要求跟java的是一样的,第一个位置可以说字母.下划线.美元符号.其他位置可以字母.下划线.美元符号.数字. ...
- 《浏览器工作原理与实践》<02>TCP协议:如何保证页面文件能被完整送达浏览器?
前言: 在衡量 Web 页面性能的时候有一个重要的指标叫“FP(First Paint)”,是指从页面加载到首次开始绘制的时长.这个指标直接影响了用户的跳出率,更快的页面响应意味着更多的 PV.更高的 ...
- 11_Hive TransForm 案例
1.需求:将Json格式的数据处理后插入新表中 数据文件如下:rating.json,文件格式:{"movie":"2858","rate" ...
- C - Calculation 2 HDU - 3501 (欧拉)
Given a positive integer N, your task is to calculate the sum of the positive integers less than N w ...
- ACM-ICPC 2018 徐州赛区网络预赛 J. Maze Designer (最大生成树+LCA求节点距离)
ACM-ICPC 2018 徐州赛区网络预赛 J. Maze Designer J. Maze Designer After the long vacation, the maze designer ...
- 2017 Chinese Multi-University Training, BeihangU Contest
2017 Chinese Multi-University Training, BeihangU Contest Add More Zero 思路:log10(2^m) = m*log10(2) 代码 ...
- Python将HTML转换为PDF
Python将HTML转换为PDF 使用pdfkit库和wkhtmltopdf, pip install pdfkit wkhtmltopdflinux中一般需要添加sudo权限. Windows安装 ...