• 学习Python的核心注意点(Pycharm2017开发)


    1.Python 中的变量:是容器(bucket)还是标签(label)?

           在Python中“变量”这个名称或许有点误导性,应该叫“名称”或“标签”会更准确一些。但是,似乎所有人都习惯称为“变量”了。无论叫什么名称,都应该知道Python中的变量是如何进行工作的。

           对变量的常见解释就是存储值的容器,有点像个桶(bucket),当然这不算准确。对许多编程语言(如C语言)来说,这种解释是合理的。

           但是,Python中的变量不是容器,而是指向Python对象的标签,对象位于解释器的命名空间中。任意数量的标签(或变量)可以指向同一个对象。当对象发生变化时,所有指向它的变量的值都会改变。

           通过以下简单代码,深刻体会理解上述含义:

    1 a=[1,2,3]
    2 b=a
    3 c=b
    4 b[1]=5
    5 print(a,b,c)
    View Code

            上述代码运行结果为:[1, 5, 3] [1, 5, 3] [1, 5, 3]

            如果将变量视为容器,以上结果就说不通了。改变了一个容器的内容,另外两个容器不应该同时发生变化。但是,如果变量只是指向对象的标签,就说得通了。3个标签都指向同一个对象,若对象发生变化,则3个标签都会反映出来。

           如果变量指向的是常量或不可变值,上述区别就不是十分明显了:

    1 a=1
    2 b=a
    3 c=b
    4 b=5
    5 print(a,b,c)
    View Code

              上述代码运行结果为:1 5 1

            因为变量指向的对象无法改变,所以变量的表现与两种解释均符合。实际上在第三行代码执行完毕后,a、b和c就全都指向了同一个不可更改的整数对象,其值为1。下一行代码b=5则是让 b指向整数对象5,但a和c的指向没有变化。



  • 相关阅读:
    Flask-SQLAlchemy
    with 与 上下文管理器
    使用@property
    C++:如何把一个int转成4个字节?
    尝试理解Flask源码 之 搞懂WSGI协议
    qt setData()和data()
    我使用过的Linux命令之sftp
    linux下如何使用sftp命令
    Linux环境下安装JDK
    CentOS 6.5 配置IP地址的三种方法
  • 原文地址:https://www.cnblogs.com/Qmin/p/12123274.html
Copyright © 2020-2023  润新知