关于链式赋值的一些注意点:

a=[]
b=[]
x=y=[]
print(a==b) #True
print(x==y) #True
print(a is b) #False
print(x is y) #True
a.append(1)
x.append(666)
print(a,b,x,y)
输出结果为:
[1] [] [666] [666]

aa=1
bb=1
cc=dd=1
print(aa==bb) #True
print(cc==dd) #True
print(aa is bb) #True
print(cc is dd) #True

总结:对于不可变类型,不存在修改的问题,所以可以多个值指向同一个ID,
如x=y=10,如果想修改成x等于20,只能通过重新赋值的方法,如x=20,此时
x所指向的ID路径发生变更,并不是在原ID上进行修改,所以不会影响到y的路径和
y所对应的id
而对于可变类型,由于存在增删修改的问题,所以如果不是重新赋值,则都是在原id处进行修改,
若存在多个值指向此处id,则这些值的输出结果都会发生不改变。

另一个:
s = [1, 2, 3, 4, 5, 6]
i = 0
i = s[i] = 3
print(i)
print(s)
输出结果:
3
[1, 2, 3, 3, 5, 6]
先说结论:
Python 的链式赋值顺序是 自左往右 。
原理:
python是一门对象语义类型编程语言。
对象语义,也称为引用语义,指使用系统标准的拷贝方式将一个源对象拷贝成为目标对象后,
源对象与目标对象之间依然共享底层资源,对任意一方的改变都将影响到另一方。

由于不需要像 C 语言那般要求对象之间的独立性,
所以,Python 的赋值语句就仅仅是一条语句,而非表达式,也就不存在返回值。
在 Python 的定义中,表达式是由操作符(Operator)连接而成的语句,
但等号 = 并不属于 Python 的操作符,而是分隔符(Delimiters)。
所以下列语句在 Python 中是非法的。

x = (y = 1) #会报错

因为 y = 1 并没有返回值,所以最后执行的是将 “没有返回值” 赋值给了变量 x,
显然这样的语义是不存在意义的。

转载于:https://www.cnblogs.com/realadmin/p/10011312.html

pyhton链式赋值在可变类型/不可变类型上的区别以及其本质相关推荐

  1. python 链式比较 2._特色的Python序列解包、链式赋值、链式比较

    一.序列解包 序列解包(或可迭代对象解包):解包就是从序列中取出其中的元素的过程,将一个序列(或任何可迭代对象)解包,并将得到的值存储到一系列变量中. 一般情况下要解包的序列包含的元素个数必须与你在等 ...

  2. Python 笔试集(1):关于 Python 链式赋值的坑

    前言 Python 的链式赋值是一种简易型批量赋值语句,一行代码即可为多个变量同时进行赋值. 例如: x = y = z = 1 链式赋值是一种非常优雅的赋值方式,简单.高效且实用.但同时它也是一个危 ...

  3. [Python]链式赋值(Chained assignment)

    [Python]链式赋值(Chained assignment) 在C,Java语言中,赋值是从右到左依次执行. a = s = 3 等价于: a = (s = 3),即s = 3表达式是有返回值的. ...

  4. python支持链式赋值和多重赋值_Python: 链式赋值的坑

    在我们使用Python的过程中, 经常遇到赋值语句, 就像下面的那样: a = 3 b = 3 可能你会觉得我又要说什么变量赋值就是引用, 这么简单的知识就不讨论啦, 相信聪明的大家肯定都知道的, 我 ...

  5. python链式赋值与C++赋值的结果比较与分析

    先上C++的代码吧: #include<iostream> using namespace std; int main() { cout<<"hello world& ...

  6. c语言建立队列(顺序队列、循化队列和链式队列)

    c语言建立队列 一.顺序队列 队列的顺序存储结构 顺序队列的讨论 "下溢"现象 "真上溢"现象 "假上溢"现象 二.如何解决"假上 ...

  7. 数据结构 - 队列简介 及 1个简单的c语言链式队列代码实现

    1. 队列的定义 所谓队列(queue)就是一种能实现"先进先出"的一种线性存储结构. 跟栈有点类似,  例如栈只有1个出入口, 任何元素进入或者离开栈都必须经过同1个出入口(栈顶 ...

  8. 链式前向星dij堆优化

    链式前向星 nextnextnext指的是上一条同起点边的位置,tototo表示这条边的终点,valvalval表示边权. u.v.valu.v.valu.v.val分别表示起点,终点,边权. hea ...

  9. Java学习第十二天----方法参数类型以及返回值类型问题、链式编程、package包、权限修饰符、内部类、成员内部类

    Java学习第十二天----方法参数类型以及返回值类型问题.链式编程.package包.权限修饰符.内部类.成员内部类 1.方法参数类型: (1)类名作为形式参数: public class MyTe ...

最新文章

  1. DL之Mask R-CNN:2018.6.26世界杯阿根廷队VS尼日利亚比赛2:1实现Mask R-CNN目标检测
  2. 图解CSS的padding,margin,border属性
  3. Loadrunner-web资源相关图表
  4. flash背景透明、置底、禁止放大 右键菜单
  5. [密码学基础][每个信息安全博士生应该知道的52件事][Bristol Cryptography][第39篇]侧信道攻击和故障攻击有什么区别
  6. [小技巧][JAVA][转换]List, Integer[], int[]的相互转换
  7. ubuntu16.04安装pycharm
  8. java html转图片_Python一键转Java?“Google翻译”你别闹
  9. Unity界面插件NGUI基础教程
  10. 智头条」十四五数字经济发展规划发布,工信部推动充电标准统一
  11. 怎样才能提取图片中的文字
  12. 佳能MG3620卡纸后错误代码1401/5100
  13. 固态硬盘数据恢复教您如何操作
  14. 【C语言】实现简单的五子棋
  15. jrtplib库的使用
  16. HTML最基本的页面
  17. Maven学习:项目构建生命周期
  18. Mysql(Python相关) day01
  19. 量化投资从0开始系列 ---- 12. 上期所日统计数据
  20. springboot手机短信验证码登录

热门文章

  1. 直接在 DNA 上执行 SQL 操作,已通过 PostgreSQL 验证
  2. 2021年高考成绩什么时候查询辽宁,2021年辽宁高考成绩什么时候几点可以查
  3. python内点法_python射线法判断一个点在图形区域内外
  4. css 根据宽度适应
  5. java 夏令时标志_夏令时随绝对日期而变化
  6. html设置功能区菜单,html – 具有“3D”效果的功能区
  7. ajax获得excel文件流在前端打开_Javascript前端开发:jsonp的原理你真的懂吗?
  8. html代码js正则,过滤所有HTML代码和CSS,JS
  9. 从0开始学习自动化测试框架cypress(四)登录
  10. oracle完全卸载重装历程