前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python每日一题:变量交换

Python每日一题:变量交换

作者头像
用户7685359
发布2020-08-24 16:08:09
3740
发布2020-08-24 16:08:09
举报
文章被收录于专栏:FluentStudyFluentStudy

题目:Python 中交换两个变量的值是怎么实现的?为什么可以这样实现?

答案要点:

  1. 第一个问题,在 Python 中交换两个变量的值,只需要简单一个句话即可:
代码语言:javascript
复制
a,b = b,a
  1. 重点在于为什么可以这样交换。在 《流畅的Python》一书第8章中对这个问题做了详细的解释,它解释的关键点在于:变量是标注,而不是盒子。怎么区分标注和盒子呢?如果是标注,那么一个值可以有多个标注,这些标注都代表了同一个值,修改一个会影响另外一个。而如果是盒子,代表的是独立的个体,相互之间是不受影响的。这有点类似我们在 JAVA 里说的引用对象。
  2. 正因为变量是标识,所以当我们在 Python 中定义 a = 10 的时候,实际上会开辟两块内存,一个用来存放 10,一个用来存放变量 a ,而存放变量 a 的地址所对应的值就是 10 这个地址的地址值。和 JAVA 中的引用对象是类似的。所以当我们执行 a,b = b,a 时,其实是在交互 a 和 b 的地址值
  3. 还有一个比较关键的,假设有一个类 People() ,对于 p = People() 正确的描述应该是把变量分配给对象,反过来说 有问题的,因为执行顺序是先执行 People() 再进行的赋值。示例如下:
代码语言:javascript
复制
class People(object):
    def __init__(self):
        print('enter init')

p1 = People()
p2 = People() * 10

"""
输出结果:
enter init
enter init 
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-7-32e88bb718e7> in <module>()
      4 
      5 p1 = People()
----> 6 p2 = People() * 10

TypeError: unsupported operand type(s) for *: 'People' and 'int'
从结果可以看出是先进行实例化对象,再进行赋值的
"""

愿关注我们的人都能找到

属于自己的皮球

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-03-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FluentStudy 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档