zoukankan      html  css  js  c++  java
  • Python基础:Python的变量和对象

    一、基本原理 
    Python中一切都是对象,变量中存放的是对象的引用。这是一个普遍的法则。我们举个例子来说,Python是如何来处理的。

    1. x = 'blue'  
    2. y = 'green'  
    3. z = x  

    当python执行上面第一句的时候,会在heap中首先创建一个str对象,其文本内容为blue,同时还创建一个名为x的对象引用,x引用的就是这个str对象。第二句也是类似;第三条创建了一个名为z的新对象引用,并将其设置为对象引用x所指向的相同对象。如下图的变化。

    所以看出在Python中赋值操作符号“=”的作用是,将对象引用和内存中的某个对象进行绑定。如果对象已经存在,就进行简单的重新绑定,以便引用“=”右边的对象;如果对象引用尚未存在,就首先创建对象,然后将对象引用和对象进行绑定。这很类似与c中的指针的概念。

    Python使用“动态类型”机制,也就是说,在Python程序中,任何时候可以根据需要,某个对象引用都可以重新绑定到另一个不同的对象上(不要求是相同的类型),这和其他强化型语言如(C++,Java)不太一样,只允许重新绑定相同类型的对象上。在Python中,因为有“动态类型”机制,所以一个对象引用可以执行不同类型的对象适用的方法。当一个对象不存在任何对象引用的时候,就进入了垃圾收集的过程。

    1. >>> a = 100  
    2. >>> a /10  
    3. 10.0  
    4. >>> a[0]   
    5. Traceback (most recent call last):   
    6.   File "<pyshell#166>", line 1in <module>   
    7.     a[0]   
    8. TypeError: 'int' object is not subscriptable   
    9. >>> a = 'hello'  
    10. >>> a[0]   
    11. 'h'  
    12. >>> a /10  
    13. Traceback (most recent call last):   
    14.   File "<pyshell#169>", line 1in <module>   
    15.     a /10  
    16. TypeError: unsupported operand type(s) for /: 'str' and 'int' 

    第一句 a = 100 
    Python会在heap创建一个int对象,其内容为100,同时创建a变量,其值指向heap中的int对象

    第二句 a/10
    Python适用“动态类型”机制,判断a指向的对象是int型,可以适用/(除法)操作。于是便进行运算产生结果。(它会在heap中在创建一个10.0的对象么?)

    第三句 a[0]
    Python适用“动态类型”机制,判断a指向的对象是int型,并不适用[](分片)操作。于是就进行报错。

    第四句 a = 'hello'
    Python会在heap创建一个str对象,其内容为hello,同时改变a变量,使得其值指向heap中的str对象。同时原来的int对象,由于不在存在对象引用,所以就进入了垃圾收集过程。

    第五句 a[0]
    Python适用“动态类型”机制,判断a指向的对象是str型,可以适用[](分片)操作。于是便进行运算产生结果。

    第六句 a/10
    Python适用“动态类型”机制,判断a指向的对象是str型,并不适用/(除法)操作。于是就进行报错。

    总之 :在Python中一切都是对象,变量总是存放对象引用。当一个对象没有变量指向它的时候,它便进入了垃圾收集过程。Python的“动态类型”机制,负责检查变量的对象引用适用操作。如果该对象不适用该操作,则会直接报错。一句话”变量无类型,对象有类型 “

    via http://www.linuxidc.com/Linux/2012-09/69523.htm

  • 相关阅读:
    java中volatile关键字的含义
    2019年个人总结
    跟随Javac代码来解答字节码的疑惑
    Python装饰器实现带参数和不带参数
    try with resource当中你没有注意到点。。
    IDEA中,已经被加到版本库的文件如何在提交的时候忽略它们
    连接mysql客户端报错: java.sql.SQLException: Unable to load authentication plugin 'caching_sha2_password'
    从字节码层次看i++和++i
    对lambda表达式的字节码实现个人理解
    解决mvn clean install的报错The packaging for this project did not assign a file to the build artifact
  • 原文地址:https://www.cnblogs.com/youxin/p/3059865.html
Copyright © 2011-2022 走看看