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如何做 ...
随机推荐
- IOS 点击按钮拨号
- (IBAction)OnTouch_bHotLine:(id)sender { [[UIApplication sharedApplication] openURL:[NSURL URLWithS ...
- arcgis js 之 渔网工具(调用地图服务)
arcgis js 之 渔网工具(调用地图服务) 原理: 简历不同级别的网渔网图层,设置显示比例尺.然后发布服务,使用MapImageLayer接收. 过程: 1.在arcmap中用创建渔网工具将不同 ...
- ThreeJS 3d模型简介
本文主要是对Threejs中加载模型的支持种类进行简单的知识科普. 3ds (.3ds) 3ds是3ds max通用储存文件格式.使用的范围更宽,可被更多的软件识别使用. amf (.amf) AMF ...
- scroll滚动条掩藏
掩藏scroll滚动条::-webkit-scrollbar ::-webkit-scrollbar {} /* 1 */ ::-webkit-scrollbar-button {} /* 2 */ ...
- 第六章、ajax方法以及序列化组件
目录 第六章.ajax方法 一.choice参数介绍 二.MTV与MVC模型 三.ajax方法 四.案例 五.Ajax传json格式的数据 六. AJAX传文件 代码如下 ajax传文件需要注意的事项 ...
- Centos7 docker、harbor 安装配置
Docker 安装 wget -O /etc/yum.repos.d/epel.repo http://mirrors.cloud.tencent.com/repo/epel-7.repo wget ...
- redis——java访问redis
1,使用jedis的java客户端来访问redis服务器,有点类似于通过jdbc访问mysql一样: 2,如果是spring集成时,可以使用spring data 来访问redis,spring da ...
- CDQ 分治解决和点对有关的问题
具体可以去这篇博客学习: https://oi-wiki.org/misc/cdq-divide/
- Mac环境下使用Appium Inspector进行元素定位
一.摘要 本篇博文介绍在Mac系统上使用AppiumI Inspector进行App页面元素定位 二.Finding elements by xpath WebElement digit_9 = dr ...
- Create Advanced Web Applications With Object-Oriented Techniques
Create Advanced Web Applications With Object-Oriented Techniques Ray Djajadinata Recently I intervie ...