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

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. UVa12304(计算几何中圆的基本操作)

    断断续续写了250多行的模拟,其间被其他事情打扰,总共花了一天才AC吧~ 这道题目再次让我明白,有些事情看起来很难,实际上并没有我们想象中的那么难.当然了我主要指的不是这个题的难度…… 也是初学计算几 ...

  2. 解决Centos下SSH登录慢的问题

    产生这个问题的原因是:server的sshd会去DNS查找访问client IP的hostname,如果DNS不可用或者没有相关的记录就会花费大量的时间. 1.在server上/etc/hosts文件 ...

  3. nginx之location简单匹配总结

    location匹配规则与优先级 = 精确匹配,匹配成功则停止匹配 ^~   前缀普通字符匹配,匹配成功则停止匹配 ~ 正则匹配,区分大小写:多个正则按顺序匹配 ~*   正则匹配,不区分大小写:多个 ...

  4. jQuery prop() 与 removeProp()源码解读

    prop() prop: function( elem, name, value ) { var ret, hooks, notxml, nType = elem.nodeType; // don't ...

  5. [在读]HTML5数据推送应用开发

    最近买的,讲SSE的,才看完前2章.

  6. 洛谷 P1873 砍树

    砍树 二分答案,难度较低. #include <iostream> #include <cstdio> #include <algorithm> using nam ...

  7. 关于h5中背景音乐的自动播放

    音乐的自动播放属性,这里也介绍一下: <audio controls="controls" autoplay="autoplay"> <sou ...

  8. node.js之Windows 系统下设置Nodejs NPM全局路径

    node.js 0.10 版本下修改全局路径: npm config set cache "D:\nodejs\node_cache" npm config set prefix ...

  9. Java生成-zipf分布的数据集(自定义倾斜度,用作spark data skew测试)

    1.代码 import java.io.Serializable; import java.util.NavigableMap; import java.util.Random; import jav ...

  10. windows下Mongodb和Memcached安装笔记

    MongoDB安装: D:\ProgramFiles\MongoDBServer3.2\bin\mongod --dbpath D:\mongoData D:\ProgramFiles\MongoDB ...