首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

python——赋值

赋值 赋值操作,本来没有什么细节。但是python现在的赋值操作也是花里胡哨的,跟C++快一样烦人了,你不用这种方式,总有人用,因此还是有必要学一下。...序列赋值 直接看代码, 其中第三行的赋值是可行的,合法的语句,不像表明上看到的A, B组成一个元组,元组是不可变对象,因此无法赋值。...赋值成功。 这种操作是由于python会在赋值的时候发生解包操作,这个操作能够在赋值运算符左右两侧的序列长度是相等的情况下进行。...的目的有些背道而驰,可能这样做会显得python比较高大上,而不是那么简单。...python3中的扩展序列解包 python3中对于那种将序列划分为“前面指定的一部分和剩余的部分”这种常见的编码模式提供了扩展序列解包方式。

2.1K20

Python:序列的增量赋值

增量赋值运算符有 += 和 *=。+= 背后的特殊方法是 __iadd__,如果一个类没有实现 __iadd__ 方法,Python 会退一步调用 __add__ 方法。...1298277978824 id(c) = 1298277978696 id(c) = 1298277978632 id(d) = 1298277972872 id(d) = 1298277136616 了解了序列的增量赋值...,我们来看 Leonardo Rochael 在 2013 年的 Python 巴西会议上提到的谜题: t = (1, 2, [30, 40]) t[2] += [50, 60] A. t 变成 (1,...因为 tuple 不支持对它的元素赋值,所以会抛出 TypeError 异常 C. 以上两个都不是 D. A 和 B 都是对的 估计很多人会跟我一样选 B,但其实答案是 D。...3、增量赋值不是一个原子操作,我们刚才也看到了,它虽然抛出了异常,但 t 的值还是改变了。

1.2K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Python 动态赋值的陷阱

    花下猫语:在上一篇文章《Python与家国天下》的第三节中,我借 Python 猫之口介绍了关于局部作用域的变量解析问题,还引入了抽象语法树的隐藏内容,最后触及了 CPython 的底层实现原理的边界...) ---- 在工作中, 有时候会遇到一种情况: 动态地进行变量赋值 , 不管是局部变量还是全局变量, 在我们绞尽脑汁的时候, Python已经为我们解决了这个问题....Python的命名空间通过一种字典的形式来体现, 而具体到函数也就是locals() 和 globals(), 分别对应着局部命名空间和全局命名空间....于是, 我们也就能通过这些方法去实现我们"动态赋值"的需求....从上面罗列出来的几个关键语句的字节码可以看出, 直接赋值/读取 和 通过locals()赋值/读取 本质是很大不同的.

    1.5K30

    Python——赋值语句

    ,通用性 a,b,c = [1,2,3] a,*b = 'spam' 扩展的序列解包(Python3.0) spam = ham = 'lunch' 多目标赋值运算 spams += 42 增强赋值运算...Python中一个常用的编写代码的技巧。...因为语句执行时,Python会建立临时的元组,来存储右侧变量原始的值,分解赋值语句也是一种交换两变量的值,却不需要自行创建临时变量的方式:右侧的元组会自动记住先前的变量的值。...事实上,Python中原始的元组和列表赋值语句形式,最后已经被通用化,以接受右侧可以是任何类型的序列,只要长度相等即可。...当在这种环境中使用的时候,在每次迭代中,Python直接把下一个值得元组分配给名称的元组,例如,在第一次循环中,就好像我们运行如下的赋值语句: a,*b,c = (1,2,3,4) # b gets

    1.8K20

    Python: 链式赋值的坑

    在我们使用Python的过程中, 经常遇到赋值语句, 就像下面的那样: a = 3 b = 3 可能你会觉得我又要说什么变量赋值就是引用, 这么简单的知识就不讨论啦, 相信聪明的大家肯定都知道的, 我想讲的是链式赋值...第1~2行简单解释下: 分别LOAD_CONST5个数字, 组成一个列表, 赋值给s,再取一个0, 赋值给i.接下来的就是我们关心的, 也是带给我们意外的代码....它会返回赋值的结果3, 所以在它们的链式赋值中, 是将右边表达式的返回值, 再赋值给左边的, 例如: a = s = 3 等价于: a = (s = 3) 也就是 s=3 返回3, 再赋值给a 而在python...---- 感谢@Daetalus童鞋指出问题: 支持表达式赋值是Python语言的核心,比如a = b + 3。...Python的表达式是由操作符连接而成的,但“=”在Python中并不是操作符(Operator),只是语法分隔符(Delimiters)。

    1.2K10

    Python变量并列赋值的疑问

    Python最引以为傲的一个特性是可以原地交换两个变量的值,既简洁又高效。这其中的原因在于python的变量存储的是地址而非实际数据,所以当交换两个变量时实际上是交换了地址引用。...运行结果2 在尝试解释这个问题前,我们先试验一个python变量赋值的小例子: ?...可以发现,python中对变量的赋值实际上是取决于变量对应数值的,当变量的赋值一致时,无论来源如何(初次赋值、再次赋值或者是由其他计算得到),只要赋值相同就都指向同一地址。...所以,在python变量管理中,值的地址决定了变量的地址,而非变量存储了值的大小。...,意味着a, b = b, a 不同于 b, a = a, b; 并列赋值时,先保留等号右侧的取值,再依次赋值给等号左侧的变量。

    2.1K40

    Python切片赋值操作

    问题 首先来看一小段列表推到的python代码 a = [1,2,3] b = a # 赋值1 b[:] = [x+1 for x in a] print(a,b) # 赋值2 b = [x-1 for...2. step by step 其实我们有结果再推原因,应该大概可以知道可能b[:]和a是共享同一块内存的,实践是检验真理的唯一标准,让我们分别在赋值1和赋值2之后分别输出a,b的内存地址如下: 140348034061384...140348034061384 140348034061384 140348034060872 果不其然,第一次a,b都指向的是同一块内存,而赋值2则是在原来的地址上做修改,或者可以分别输出a is...b来判断a,b是否为同一个对象 再将代码稍加改动: a = [1,2,3] # 改成a的切片 b = a[:] print(a,b) print(id(a),id(b)) b = [x-1 for x..., 3] [0, 1, 2] 140489909315016 140489909314632 我们发现当使用a[:]时,这时候返回的是一个新的对象,所以其id都不相同

    1.2K70

    序列赋值引发的Python列表陷进

    序列赋值是Python默认操作,如果使用不当,有可能会掉入语法陷阱。 + +是指把两个序列的元素拼接在一起。...通常+号两侧的序列由相同类型的数据所构成,在拼接的过程中,两个被操作的序列都不会被修改,Python会新建一个包含同样类型数据的序列作为拼接的结果。...给my_list的最后一个元素的列表赋值,结果所有三个元素的列表都被赋值了!这反映出my_list这三个元素不是3个列表,而是3个列表引用,指向了同一个相同的列表。...一、赋值成功,因为t[2]指向的是一个可变对象(列表[30, 40]),可变对象是能赋值的。二、报错,因为可变对象赋值给了不可变对象(元组t),不可变对象不能赋值。...参考资料: 《流畅的Python》

    52210

    python基础(9)增强型赋值与使用普通赋值的区别

    a,目前a和b共用一片内存地址,关键点:b = b + [4, 5, 6],是在原来b的基础上,添加了一个列表,并且将新的值赋值给了左边的b,原先b的内存地址是指向a的,但是现在又重新赋值了,所以b重新开辟了一片新的内存地址...共享引用」的概念:在 Python 中,允许若干个不同的变量引用指向同一个内存对象。...同时在前文中也提到,增强赋值语句比普通赋值语句的效率更高,这是因为在 Python 源码中, 增强赋值比普通赋值多实现了“写回”的功能,也就是说增强赋值在条件符合的情况下(例如:操作数是一个可变类型对象...这一特点导致了增强赋值语句中的变量对象始终只有一个,Python 解析器解析该语句时不会额外创建出新的内存对象。...所以例一中变量 a、b 的引用在最后依旧指向了同一个内存对象;相反,对于普通赋值运算语句,Python 解析器无法分辨语句中的两个同名变量(例如:b = b + 1)是否应该为同一内存对象,所以干脆再创建出一个新的内存对象用来存放最后的运算结果

    61220

    【说站】python赋值运算符支持哪些赋值

    python赋值运算符支持哪些赋值 1、赋值运算符支持链式赋值。如果想让多个变量同时引用同一个对象,可以使用链式赋值。...a = b = c = 18 print(a)    # 18 print(b)    # 18 print(c)    # 18 2、赋值运算符支持参数赋值,可在赋值运算符左侧添加其他运算符,实现参数赋值...参数赋值可以使代码更加简洁,而且可读性更强。...例如:+=、-=、*=、/=、%=     a += b 相当于:a = a + b     a -= b 相当于:a = a - b 以上就是python赋值运算符支持的赋值类型,希望对大家有所帮助。...更多Python学习指路:python基础教程 本文教程操作环境:windows7系统、Python 3.9.1,DELL G3电脑。 收藏 | 0点赞 | 0打赏

    60620

    python048_用变量赋值_连等赋值_解包赋值_unpack_assignment

    变量赋值 s1 = "oeasy" s2 = s1 print(id(s1)) print(id(s2)) print(id(s1) == id(s2)) 将s1的值 赋给s2 s2 所指向的...内存地址 就是s1 所在的内存地址 图解 地址是 同一个 两个变量 都指向了 这个 地址 完成了 变量的复制 为什么要 用 变量 对 另一个变量 赋值 呢?...连等赋值 一行之中 可以给 多个变量赋值 这就相当于 两次赋值 先算右边的等号 b = 3 将 3 赋给 b 再算左边的等号 a = b 将 b 赋给 a 两个等号 两次 赋值 如果...连等赋值 解包赋值 所有对象 变量 variable 模块 module 函数 function 类 class 都有 自己所属的 类型 也都 在内存中 引用 唯一位置(id) 这些数字 组成了...python系统 现在 已经声明了 哪些变量 ?

    5010

    python list拷贝赋值问题

    参考链接: Python list append() 在python中,用等号或者append方法进行list的赋值,实际上是将原list的引用赋给了新的变量,在后续使用append方法改变这两个list...(除append之外还有pop),如果重新给b赋其他值,则不会出现上述问题:(应该是重新赋值时新建了一块地址叫b,切断了a和之前的变量b的关系)  b = [0,1,2] a = b b = b[1:]...2.用copy将list赋值:a=b.copy(),则id(a)!=id(b), id(a[0])==id(b[0])。...5.也就是说,当两个变量的某一层次是引用关系时,使用append、pop修改当前层级会同时修改另一变量,使用直接赋值修改当前层级不会同时修改另一变量。...当两个变量的某一层次是引用关系时(id(a)==id(b)),使用赋值修改下一层级的值(a[0]=x),会同时修改另一变量。 6.用深拷贝a=b.deepcopy()肯定没错。

    1.1K20
    领券