• 一入python深似海--变量和对象


    一、基本原理 

    Python中一切都是对象,变量是对象的引用。

    这是一个普遍的法则。我们举个样例来说。Python是怎样来处理的。

    x = 'blue'  
    y = 'green'  
    z = x  


    当python运行上面第一句的时候,会在heap中首先创建一个str对象,其文本内容为blue。同一时候还创建一个名为x的对象引用。x引用的就是这个str对象。

    第二句也是类似;第三条创建了一个名为z的新对象引用。并将其设置为对象引用x所指向的同样对象。例如以下图的变化。


    所以看出在Python中赋值操作符号“=”的作用是,将对象引用和内存中的某个对象进行绑定。假设对象已经存在,就进行简单的又一次绑定。以便引用“=”右边的对象;假设对象引用尚未存在。就首先创建对象,然后将对象引用和对象进行绑定。

    Python使用“动态类型”机制,也就是说,在Python程序中。不论什么时候能够依据须要,某个对象引用都能够又一次绑定到还有一个不同的对象上(不要求是同样的类型)。这和其它强化型语言如(C++,Java)不太一样,仅仅同意又一次绑定同样类型的对象上。

    在Python中,由于有“动态类型”机制,所以一个对象引用能够运行不同类型的对象适用的方法。当一个对象不存在不论什么对象引用的时候。就进入了垃圾收集的过程。

    查看类型程序:

    import types
    type(100)

    >>> a=100
    >>> a/10
    10
    >>> a[0]
    
    Traceback (most recent call last):
      File "<pyshell#5>", line 1, in <module>
        a[0]
    TypeError: 'int' object has no attribute '__getitem__'
    >>> a='hello'
    >>> a[0]
    'h'
    >>> a/10
    
    Traceback (most recent call last):
      File "<pyshell#8>", line 1, in <module>
        a/10
    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的“动态类型”机制,负责检查变量的对象引用适用操作。

    假设该对象不适用该操作。则会直接报错。一句话”变量无类型。对象有类型 “

     

    二、python的id()。==,is的区别

    1. id():获取的是对象在内存中的地址

    2. is :比对2个变量的对象引用(对象在内存中的地址。即id() 获得的值)是否同样。假设同样则返回True。否则返回False。

    换句话说,就是比对2个变量的对象引用是否指向同一个对象。

    3. ==:比对2个变量指向的对象的内容是否同样。

  • 相关阅读:
    数仓备机DN重建:快速修复你的数仓DN单点故障
    深度学习分类任务常用评估指标
    云小课 | MRS基础入门之HDFS组件介绍
    华为云数据库GaussDB(for Cassandra)揭秘第二期:内存异常增长的排查经历
    为什么vacuum后表还是继续膨胀?
    Go 自定义日志库
    Go time包
    Go 文件操作
    Go 包相关
    【程序人生】跟小伙伴们聊聊我有趣的大学生活和我那两个好基友!
  • 原文地址:https://www.cnblogs.com/lxjshuju/p/6788814.html
Copyright © 2020-2023  润新知