零基础学python-6.2 共享引用
这一章节说说共享引用
我们先举一个样例
a=1
b=a
上面的样例就是共享引用,这里我们说说整个过程:
1.创建一个对象1
2.创建一个变量a
3.把a和1所在的内存空间连接起来。就是a引用1
4.a正在使用。创建变量b
5.a这个时候被对象1替代
6.b引用对象1
我们以下举另外两个样例:
>>> a=1.1
>>> b=1.1
>>> a is b
False
>>> a=1.1
>>> b=a
>>> a is b
True
>>>
从样例中能够看见,最上面的a和b,两者直接分别指向不同的对象。以下的a和b,指向的是同一个对象, 这就是共享引用。这是一种内部的优化。
我们再来举一些样例。大家能够思考一下
a=1
b=a
a='2'
这个时候会如何?
事实上这个时候是这种。b=1。a='2'
再来,
a=1
b=a
a=a+1
这个时候又会是如何?
因为我们之前已经说过,整数类型对象是不可变。所以,最后的结果是a=2,b=1,2这个对象是又一次创建出来,然后赋值给a,所以不会出现a变b也变的情况
上面我们都是引用一些不可变的对象类型,我们以下引用一些可变的看看如何?
>>> a=[1,2,4]
>>> b=a
>>> b is a
True
>>> a=24
>>> b is a
False
>>> a
24
>>> b
[1, 2, 4]
>>>
假设我们从可变的换成不可变的,基本变化不会出现。可是,假设我们知识修改当中一个值,结果会是如何?
>>> a=[1,2,4]
>>> b=a
>>> b is a
True
>>> a[0]=5
>>> b is a
True
>>> a
[5, 2, 4]
>>> b
[5, 2, 4]
>>>
我们从代码里面看到,虽然我们改变了里面的值,可是两个变量间的关系没有改变,并且b随着a的改变而改变
假设不想出现这样的情况,我们能够使用copy这个函数。或者使用分片
>>> a=[1,2,4]
>>> b=a[:]
>>> b is a
False
>>> a
[1, 2, 4]
>>> b
[1, 2, 4]
>>>
通过上面的代码能够看见,a和b事实上是引用两个不同的对象。仅仅只是他们的值同样
分片通常是用在元组,假设是列表或者字典,则必须使用copy
假设对象里面还有可变对象类型,那么须要使用deepcopy这个函数,不然还是会出现a变b变的情况
还是上面的代码。我们在最后加一句
>>> a=[1,2,4]
>>> b=a[:]
>>> b is a
False
>>> a
[1, 2, 4]
>>> b
[1, 2, 4]
>>> a==b
True
>>>
虽然a和b 的引用不同。可是假设我们使用==来对照两者,返回的结果是True。is是对照两者的引用,==对照两者的值
就讲到这里,谢谢大家
------------------------------------------------------------------
零基础学python-6.2 共享引用的更多相关文章
- [零基础学python]为什么要开设本栏目
这个栏目的名称叫做"零基础学Python". 如今网上已经有不少学习python的课程.当中也不乏精品.按理说,不缺少我这个基础类型的课程了.可是,我注意到一个问题.无论是课程还是 ...
- 零基础学python》(第二版)
---恢复内容开始--- 零基础学python>(第二版) python学习手册 可以离线下载, .chn格式, 插入小幽默笑话,在学习累的时候看看笑话 放松一下 欢迎下载转载,请注明出处,谢 ...
- 零基础学python,python视频教程
零基础学python,python视频教程 这是我收集到的互联网上的视频资源,所有内容均来自互联网.仅供学习使用. 目前我在也在学习过程中,会把学习过程中遇到问题以及解决问题的方式,总结到我的公众号[ ...
- 小甲鱼零基础学python第25讲课后习题动手练习--通讯录
小甲鱼零基础学python第25讲课后习题动手练习---通讯录 **************************通讯录要求******************************* 输入指令: ...
- Python学习课程零基础学Python
python学习课程,零基础Python初学者应该怎么去学习Python语言编程?python学习路线这里了解一下吧.想python学习课程?学习路线网免费下载海量python教程,上班族也能在家自学 ...
- 零基础学python之构建web应用(入门级)
构建一个web应用 前面的学习回顾: IDLE是Python内置的IDE,用来试验和执行Python代码,可以是单语句代码段,也可以是文本编辑器中的多语句程序. 四个内置数据结构:列表.字典.集合和元 ...
- 零基础学Python不迷茫——基本学习路线及教程!
什么是Python? 在过去的2018年里,Python成功的证明了它自己有多火,它那“简洁”与明了的语言成功的吸引了大批程序员与大数据应用这的注意,的确,它的实用性的确是配的上它的热度. Pyt ...
- [零基础学python]啰嗦的除法
除法啰嗦的,不仅是python. 整数除以整数 看官请在启动idle之后.练习以下的运算: >>> 2/5 0 >>> 2.0/5 0.4 >>> ...
- 零基础学Python 3之环境准备
一. 配置python 3 环境 1. Python 3 下载 64位 https://www.python.org/ftp/python/3.4.2/python-3.4.2.amd64.msi 3 ...
- 零基础学python之函数与模块(附详细的代码和安装发布文件过程)
代码重用——函数与模块 摘要:构建函数,创建模块,安装发布文件,安装pytest和PEP 8插件,确认PEP8兼容性以及纠错 重用代码是构建一个可维护系统的关键. 代码组是Python中对块的叫法. ...
随机推荐
- 解决tpcc_load 报错 error while loading shared libraries: libmysqlclient.so.20
在刚开始导入tpcc数据仓库时,可能会遇到 error while loading shared libraries: libmysqlclient.so.20这个错误,找不到库文件. 但是,通过fi ...
- 洛谷 P2949 [USACO09OPEN]工作调度Work Scheduling
P2949 [USACO09OPEN]工作调度Work Scheduling 题目描述 Farmer John has so very many jobs to do! In order to run ...
- 数据库联表统计查询 Group by & INNER JOIN
原数据表 视频信息表 tab_video_info 播放记录表 tab_play_record 需求 统计播放量(已经开始播放)最多的前20个视频: SELECT a.video_id, SUM( ...
- freemark实现遍历 list,每行三个
我的做法是先做一个模板,这三个只都是从list里取出来的 在后台将每三个值放到一个map里 List<Map<String, Object>> newsList=new Arr ...
- java去除反复的字符串和移除不想要的字符串
在java开发中碰到了有些字符串是反复的,假设在进行业务处理要所有遍历太对的数据就会反复,所以在进行业务处理前进行一个去重操作. watermark/2/text/aHR0cDovL2Jsb2cuY3 ...
- 代理模式之cglib动态代理
上一篇博客说了实现InvocationHandler接口的jdk动态代理,还有一种实现动态代理的方式则是:通过继承的方式实现的cglib动态代理. 先在程序中导入cglib的包,cglib-nodep ...
- Loopback測试软件AX1用户手冊 V3.1
点击:AX1 软件下载 1. 什么是AX1 AX1程序是基于windows的PC程序,用来评估 iinChip™的性能,也即是wiznet的硬件TCP/IP芯片. AX1通过网络与iinChip™评估 ...
- 实现 jstl标签foreach 功能
jsp 页面 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEn ...
- dom 编程(html和xml)
html dom与xml dom关系: 什么是 DOM? DOM 是 W3C(万维网联盟)的标准. DOM 定义了訪问 HTML 和 XML 文档的标准: "W3C 文档对象模型 (DOM) ...
- 关于PageRank的总结
好久不用CSDN,最近想给带的本科生实验课开个期末习题专题页,发现CSDN的博客忽然要绑定之类.只好弃用回博客园写学习总结了.塞翁失马焉知非福. *************************** ...