Python学习教程:Python增强赋值及共享引用注意事项

概述

Python中的增强赋值是从C语言中借鉴出来的,所以这些格式的用法大多和C一致,本身就是对表达式的简写,即二元表达式和赋值语句的结合,比如a += b 和a = a + b 就是一致的,比如还有以下的增强赋值语句。

即增强赋值语句适用于任何支持隐式二元表达式的类型,比如“+”的多态:数字的相加和字符串的合并

数字加减

a = 1
a = a + 1
print(str(a))
a += 1
print(str(a))

示例结果:

2
3

字符串合并

S = 'I'
S = S + ' like '
print(S)
S += 'Python.'
print(S)

示例结果:

I like
I like Python.

优点

  • 简洁
  • 减少一次a的执行,执行速度更快
  • 针对可变对象,增强赋值会自动选择执行原处的修改运算,而不是速度更慢的复制。这就引申出我们在可变对象中可能涉及的共享引用问题。

共享引用

当我们想要扩展列表时,比如将一组元素添加到末尾,我们会怎么做?

L = [1, 2, 3]
# 传统“+”法
L = L + [4, 5]
print(L)
# 利用列表方法extend
L.extend([6, 7])
print(L)

示例结果

[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5, 6, 7]

示例中第一中“+”法,即采用合并的方法,需要新创建一个对象把左侧的L复制到新列表中,然后再[4, 5]复制到新列表中。而第二种extend则是直接在内存空间列表L末尾L加上[4, 5],即速度会更快,增强赋值则是自动采用的第二种即L.extend([6, 7])和L += [6, 7]是等价的,也是最优的选择。这种合并方式虽然快,但对于可变对象的共享引用则会变的棘手些。

L1 = [1, 2, 3]
L2 = L1
L2 = L2 + [4, 5]
print(L2)
print(L1)
print('-' * 21)
L1 = [1, 2, 3]
L2 = L1
L2 += [4, 5]
print(L2)
print(L1)

示例结果:

[1, 2, 3, 4, 5]
[1, 2, 3]
---------------------
[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]

我们可以从示例中看到如果同一个可变对象赋值了多个变量,那么在破坏共享引用结构时,就应该对可变对象拷贝后在进行操作。

转载于:https://www.cnblogs.com/cherry-tang/p/10956288.html

Python学习教程:Python增强赋值及共享引用注意事项相关推荐

  1. 软件测试python基础_软件测试学习教程——python基础

    原标题:软件测试学习教程--python基础 一,print()函数 print 作用:把" "内部的内容,输出到屏幕. print("hello world" ...

  2. python语言提供的3个基本数字类型是什么_计算机二级python学习教程(3) python语言基本数据类型...

    本文继续计算机二级python教程的学习,之前已经学习过了计算机二级python学习教程(1) .计算机二级python学习教程(2) 3.1 数字类型 数字类型:整数类型.浮点数类型.复数类型. 整 ...

  3. Python学习教程:0基础学Python?手把手教你从变量和赋值语句学

    这篇Python学习教程将手把手教你入门学Python,从变量和赋值语句学起,前面也有专门给大家出过相关的详细教程,有需要的伙伴,可以找一下前面的教程! 导读:在本文中,你会学到如何处理数字.定义与使 ...

  4. Python学习教程(Python学习路线):Day13-进程和线程

    Python学习教程(Python学习路线):进程和线程 今天我们使用的计算机早已进入多CPU或多核时代,而我们使用的操作系统都是支持"多任务"的操作系统,这使得我们可以同时运行多 ...

  5. Python学习教程(Python学习路线):Day14A-网络编程入门

    Python学习教程(Python学习路线):网络编程入门 计算机网络基础 计算机网络是独立自主的计算机互联而成的系统的总称,组建计算机网络最主要的目的是实现多台计算机之间的通信和资源共享.今天计算机 ...

  6. Python学习教程:数据类型—字符串大总结

    Python学习教程:数据类型-字符串大总结 1. Python字符串的创建 字符串是Python中最常见的数据类型,通常使用单引号或双引号来定义一个字符串,如下: str = "我是字符串 ...

  7. Python学习教程:用Python模拟登录淘宝

    今天跟大家出的Python学习教程,Python模拟登录淘宝,我知道,肯定是吸引了你,一起来看看吧! 最近想爬取淘宝的一些商品,但是发现如果要使用搜索等一些功能时基本都需要登录,所以就想出一篇模拟登录 ...

  8. Python学习教程:用Python破解wifi密码

    Python真的是无所不能,原因就是因为Python有数目庞大的库,无数的现成的轮子,让你做很多很多应用都非常方便.wifi跟我们的生活息息相关,无处不在.今天从WiFi连接的原理,再结合代码为大家详 ...

  9. Python学习教程(Python学习视频_Python学些路线):Day05 总结和练习

    Python学习教程(Python学习视频_Python学些路线):总结和练习 练习清单 寻找"水仙花数". 寻找"完美数". "百钱百鸡" ...

最新文章

  1. python为什么运行不了_为什么python运行效率低?原来因为它!
  2. mysql连接数设置操作(Too many connections)及设置md5值的加密密码
  3. 隔离公司各个部门--虚拟路由器(RIP)
  4. 如何使用Docker、Docker-Compose和Rancher搭建部署Pipeline(二)
  5. 数据科学入门与实战:玩转pandas之三
  6. 大数据之-Hadoop完全分布式_虚拟机环境准备---大数据之hadoop工作笔记0030
  7. vuex - redux - mobx
  8. php 上传进度条api,php如何实现上传进度条
  9. 郑州大学期末php试题,郑州大学英语期末考试试题及答案
  10. 信号与系统19(拉普拉斯逆变换)
  11. 直播视频分辨率码率参考设置
  12. 求递推数列通项的特征根法
  13. 月销10w支!不用洗牙,牙齿也能白到发光!买它,这支黑科技美白电动牙刷
  14. pc android 凤凰,应用多开,这才是最适用电脑的安卓—凤凰系统2.0
  15. xcode中ineligible devices的注意事项
  16. 刷机前忘记退出Google账号解决方案
  17. 云服务器与物理服务器有什么区别?
  18. python控制苹果手机触摸屏失灵怎么办_苹果手机触摸屏失灵的各种解决方法
  19. 线性回归-----标准方程法实现线性回归方程
  20. Matlab/Simulink代码生成到dsp系列(一)基础配置

热门文章

  1. MacBook/MacOS/Mac OS 查看进程/端口信息的相关命令
  2. mysql设计一个简单的系统_一个简单数据库设计例子
  3. linux 查看链接最终目标,linux学习笔记7-链接
  4. python哪个方向简单_现在学Python,哪个方向最简单?哪个方向最吃香 ?
  5. 【OpenGL从入门到精通】Shader专题
  6. 【WebRTC---入门篇】(十三)WebRTC音视频数据采集
  7. 如何使用C语言的面向对象?
  8. php保存成乱序,php – 调用MySQL存储过程时出现乱序错误
  9. linux 硬盘转换gpt分区格式化吗,Linux下使用gpt给磁盘分区、格式化、挂载
  10. SDH光端机的应用介绍