Python 的赋值坑 , a=b=c=1???
原文地址:https://www.v2ex.com/amp/t/443384
Python 的赋值坑 , a=b=c=1???
我想要将 a,b,c 变量同时赋值 1, 我使用了
```
In [192]: a = b = c = 1
In [193]: a, b, c
Out[193]: (1, 1, 1)
```
很明显我赋值成功了,a、b、c 都是 1
但是这个下赋值顺序是怎么样的
首先让我们先猜测一下:
第一种方式:a,b,c 同时赋值 1,a=1, b=1, c=1
第二种方式:依次赋值 c=1, b=c, a=b
以上两种显然是很合理的
但是我们要验证一下:
于是我开始说到我遇到的坑(其实这个是在说明 list 的 append 添加方法为什么返回的是 None 出现的)
假如我们创建变量 L 赋值为空, 我们先 L 以切片的形式添加 x 值
```
In [200]: L = []
In [201]: x = 4
In [202]: L[len(L):] = [x]
In [203]: L
Out[203]: [4]
```
我已经添加成功
由于 Python 的引用原理,我们可以多次添加
于是我想多次添加:
```
In [206]: L = []
In [207]: L[len(L):]=L[len(L):] = [x]
In [208]: L
Out[208]: [4, 4]
```
如我所料的一样我成功添加了 2 个 4, 也是说我每次都能获得 4,并向 L 尾部相加, 可以确定是第一种方式, 因为第二种根本只能加进一个 4:
第一种:L[len(L):]= [x], L[len(L):]= [x]
第二种:L[len(L):]= [x],L[len(L):]= L[len(L):]
好下面重点来了,我然后重点来了, 我又写了一个语句
```
In [209]: L = []
In [210]: L = L[len(L):]=L[len(L):] = [x]
In [211]: L
Out[211]: [4, 4, 4, 4]
```
这个不对啊
L 不应该等于[4]或者[4, 4, 4]吗,为什么会预测出两个结果,这个是赋值顺序问题, 正序和逆序
第一种方式的两种顺序:
正序:L = [x], L[len(L):] = [x], L[len(L):] = [x] L=[4,4,4]
逆序:L[len(L):] = [x],L[len(L):] = [x],L=[x] L=[4]
但是为什么会出现[4, 4, 4,4]
唯一的解释便是第三种赋值方式:
L = [x] # L = [4]
L[len(L):]=L # L=[4,4]
L[len(L):]=L # L=[4, 4, 4, 4]
这样我们就完全解释了这种状况
所以针对 a=b=c=1 这种赋值方式,其实是 a=1, b=a, c=a
Python 的赋值坑 , a=b=c=1???的更多相关文章
- Python语言防坑小技巧
Python语言防坑小技巧 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.赋值即定义 1>.运行以下代码会出现报错 #!/usr/bin/env python #_*_ ...
- python的赋值
python的赋值其实就是引用,我们用python的id函数看一下: 然而令人蛋疼的事情发生了, 为什么会给一个新的c赋值1,它与上面的a和b的id一样呢. 原来是python会认为一些小的整形会经常 ...
- 如何理解 Python 的赋值逻辑
摘要: 如果你学过 C 语言,那么当你初见 Python 时可能会觉得 Python 的赋值方式略有诡异:好像差不多,但又好像哪里有点不太对劲. 本文比较并解释了这种赋值逻辑上的差异.回答了为什么需要 ...
- Python 直接赋值、浅拷贝和深度拷贝全解析
直接赋值:其实就是对象的引用(别名,其实就是一个人今天叫张三 明天叫张狗子的意思).这个人比较自由单身狗嘛 可以恋爱可以分手 就是一个小屌丝. 浅拷贝(copy):拷贝父对象,不会拷贝对象的内部的 ...
- 跳出python的各种坑(1)
2017-11-1915:38:17 一定要跳出python的各种坑,一开始遇到的好多思维上的认知错误,因为刚开始学习,对python是个什么都不清楚,所以记录一下自己遇到的各种坑.不用担心自己遇到的 ...
- python 之 赋值和拷贝(你真的了解吗)
现象:先上一段代码. >>> import copy >>> a = [1,2,3,4,['a','b']] >>> b = a >> ...
- python直接赋值,浅拷贝和深拷贝
本文参考自<Python 直接赋值.浅拷贝和深度拷贝解析> 定义 直接赋值:就是对象的引用(别名) 浅拷贝(copy):拷贝父对象,不拷贝对象内部的子对象 深拷贝(deepcopy):co ...
- python中赋值和浅拷贝与深拷贝
初学编程的小伙伴都会对于深浅拷贝的用法有些疑问,今天我们就结合python变量存储的特性从内存的角度来谈一谈赋值和深浅拷贝~~~ 预备知识一——python的变量及其存储 在详细的了解python中赋 ...
- Python 直接赋值、浅拷贝和深度拷贝区别
Python 直接赋值.浅拷贝和深度拷贝区别 转自https://www.runoob.com/w3cnote/python-understanding-dict-copy-shallow-or-de ...
随机推荐
- js求两个数组的交集|并集|差集|去重
let a = [1,2,3], b= [2, 4, 5]; 1.差集 (a-b 差集:属于a但不属于b的集合) a-b = [1,3] (b-a 差集:属于b但不属于a的集合) b-a = [4 ...
- gcc的调试调研——gdb
首先来介绍一下gcc的选项: 其他选项都为常用编译选项,在这里介绍一下优化功能: 优化编译时使用选项: -O:可以告诉gcc同时减小代码的长度和执行时间,其效果等价于-O1,在这一级别上能够进行的优化 ...
- nginx添加ssl证书
ssl的证书是通过docker nginx letsencrypt 这篇随笔生成的,下面介绍如何在nginx中添加ssl 这个为全部配置, 需要替换你自己的域名,配置中强制https了 server ...
- java-同一用户顶替操作(session过期或无效)
同一账号后者登录前者被强制退出:(可以通过监听器或过滤器进行监测session是否无效) 首先根据输入的用户名和密码做验证,通过验证查询用户信息.在用户信息不为空的前提下,比较静态变量中的sessio ...
- OPUS/SILK/SPEEX 音频编码比较
音频编码器质量表 https://blog.csdn.net/houqi1993/article/details/50504045
- 【Oracle】ORA-14400: 插入的分区关键字未映射到任何分区
问题描述: 工作中使用kettle将原始库中的数据抽取到标准库中,在抽取过程中报错:[ORA-14400: 插入的分区关键字未映射到任何分区]/[ORA-14400: inserted partiti ...
- DS-1
一.作业题目 仿照三元组或复数的抽象数据类型写出有理数抽象数据类型的描述 (有理数是其分子.分母均为整数且分母不为零的分数). 有理数基本运算: 构造有理数T,元素e1,e2分别被赋以分子.分母值 销 ...
- 2018总结-->2019新目标
2018完成的事情: ①考到了驾照: ②刷了很多题,春季找到了实习,赚到了去日本旅游的经费和2019毕业租房的预算,最后签了offer: ③去了西安.天津.山西,看到了不一样的人和事: ④发了小论文, ...
- 迅速的说清楚rpc原理
第一个问题是服务提供者进程如果被kill -9暴力杀死,不能主动调用srem命令怎么办? 这个时候服务列表中多了一个黑地址指向了不存在的服务而消费者完全不知道,这个时候服务中介就成了黑中介了.那该怎么 ...
- VMware 打开虚拟机的时候提示 internal error 内部错误 遇到这个问题时我的解决方法
任务栏右键,启动任务管理器,选择“服务”选项卡 找到这个服务 启动这个服务后,再次尝试打开虚拟机,就OK了.