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

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,
显然这样的语义是不存在意义的。

pyhton链式赋值在可变类型/不可变类型上的区别以及其本质的更多相关文章

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

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

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

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

  3. 第4.7节 Python特色的序列解包、链式赋值、链式比较

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

  4. python学习(二十一) Python 中的链式赋值

    Python的链式赋值如下:

  5. DataFrame 链式赋值

    在运行以下Python代码时,Pandas抛出SettingWithCopyWarning警告: row_data = df_pred.loc[key] row_data['col'] = new_v ...

  6. Python链式赋值执行顺序及执行方式的证明

    专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 在<关于Python链式赋值的赋值顺序问题& ...

  7. 关于Python链式赋值的赋值顺序问题

    在<第4.7节 Python特色的序列解包.链式赋值.链式比较>一文中,老猿这样介绍的: 链式赋值是用一行语句将多个变量赋值为同一个值,语法如下: 变量1=变量2=变量n=赋值表达式 该语 ...

  8. 由反转链表想到python链式交换变量

    这两天在刷题,看到链表的反转,在翻解体思路时看到有位同学写出循环中一句搞定三个变量的交换时觉得挺6的,一般用的时候都是两个变量交换(a,b=b,a),这种三个变量的交换还真不敢随便用,而且这三个变量都 ...

  9. C++中的链式操作

    代码编译环境:Windows7 32bits+VS2012. 1.什么是链式操作 链式操作是利用运算符进行的连续运算(操作).它的特点是在一条语句中出现两个或者两个以上相同的操作符,如连续的赋值操作. ...

随机推荐

  1. [题解](堆)luogu_P1631序列合并

    思路来自题解 作者: Red_w1nE 更新时间: 2016-11-13 20:46 在Ta的博客查看  72 最近有点忙 没时间贴代码了== [分析] 首先,把A和B两个序列分别从小到大排序,变成两 ...

  2. morphia(2)-添加

    1.简单 @Test public void add() throws Exception { final Employee em = new Employee("遥远2",500 ...

  3. Mongo学习

    几种可能存在的实体类型 public class AAA{ public List<Common> CommonList{get;set;} } public class BBB{ pub ...

  4. visio双屏幕打开

    开始以为visio2010好像不可以 但我以前用的visio2007貌似可以 但 不想换回去了 适应了就好 后来找到大牛级认为 解决了 如下:我用的2010,按照下面修改绝对可以.1. 打开Visio ...

  5. 数据库查询,显示为树形结构(easyui+SSM)

    在实际项目上,有很多地方后台存了一个表,但是在显示查询的时候需要显示为树形结构. 本项目是easyui+SSM框架. 前台程序为: <!DOCTYPE html> <html> ...

  6. jQuery的基本使用及选择器和筛选器

    回顾 事件 鼠标clickdblclickcontextmenumouseentermouseleavemousemovemousedownmouseup​键盘keydownkeyupkeypress ...

  7. 原创 :xftp SFTP子系统申请已拒绝 请确保SSH链接的SFTP子系统设置有效

    在出现这个错误时候 如果你的远程连接没有问题 那么就执行下面的命令 service sshd restart 搞定!

  8. Mybatis Learning Notes 1

    Mybatis Learning Notes 主要的参考是博客园竹山一叶的Blog,这里记录的是自己补充的内容 实体类属性名和数据库不一致的处理 如果是实体类的结果和真正的数据库的column的名称不 ...

  9. 虚拟DOM -------- 最易理解的解释

    虚拟DOM是最先由Facebook在react里使用的, 虚拟DOM是一个特别棒的概念,我们都知道,在浏览器上进行DOM操作的时候,会特别的消耗性能而且响应.渲染特别慢,但是有了虚拟DOM就不一样了, ...

  10. Socket通讯简易学习

    Socket打开通信通道,告诉本地机器,愿意在该通道上接受客户请求——监听,等待客户请求——接受请求,创建专用链接进行读写——处理完毕,关闭专用链接——关闭通信通道(当然其中监听到关闭专用链接可以重复 ...