zoukankan      html  css  js  c++  java
  • python数据结构学习笔记(一)

    #1 python底层是C来实现的。
    #2 python一切皆对象(不管你是变量、类、函数等)
     
    #3 整数为何不会溢出?
    python在底层是通过C的32位整型数组来存储自身的整型对象的,通过32位整型数组合起来,以支持存储更大的数值,所以整型越大,就需要越多的32位整数。32位整数是4个字节,所以会4个字节的增长。
     
    #4 浮点数的内存大小是不变的
    因为python的浮点数的值在C中是通过一个double来维护的,而C中的值得类型一旦确定,大小就不变了。
    所以范围是有限的,当浮点数不断增大,会牺牲精度来进行存储。
     
    #5 对于字符串,是可变对象,长度不同大小不同
    但是空字符串是站49个字节的,这49个字节是用来维护其他成员信息的;底层结构体除了维护具体的值之外,还要维护其他信息(比如引用计数)
     
    #6 变量只是一个名字
    python的变量是一个指针,当传递一个变量的时候,传递的是指针;但是在操作一个变量的时候,会操作一个变量指向的内存。
    id(a)获取的不是a的地址,而是a指向内存的地址。
     
    #7 变量类型
    先创建变量,必须先赋值;创建相应的值后,这个值呢在C中对于一个结构体,结构体里面有一个成员专门用来存储该值对应的类型,让这个变量指向它。
    python先有值再有变量。
     
     

    对象
     
    变量a在不同的情况下,会表现出不同的行为,这正是Python多态的核心。
     
    python为什么慢?
    有相当一部分时间浪费在类型和属性查找方面。
     
     
    对象的创建
    • 通过“ Python/C API的方式”创建
    • 通过“ 类型对象去创建的”
    相比而言,第二种效率更低,开销更大。【会进行参数解析、类型检测、创建、销毁】
     
    我们说type是所有类型对象的元类,但是只有面对我们自定义的类的时候,type具有增删改的能力;
    对于内置的类type是不可以对其动态增加、删除或者修改的,它们都是PyTypeObject对象,
     
    对象的行为
     
    根据支持的操作不同,Python中可以将对象进行以下分类:
    • 数值型操作
    • 序列型操作
    • 映射型操作
    而这三种操作,PyTypeObject中分别定义了三个指针,每个指针指向一个结构体实例,这个结构体实例中有大量的成员,成员也是函数指针,指向了具体函数。
     
     
    引用计数
     
    探讨类型对象的引用计数是没有太大意义的,而且内置类型对象是超越了引用计数规则的,没必要关注,重心是在实例对象上。
     
     
    对于字典来说,遍历可以用items()方法同时检索键和相应的值;
    对与序列来说,遍历可以用enumerate()方法同时检索索引和值;
    要同时循环两个或多个序列,可以将条目与zip()函数配对。
    >>> questions = ['name', 'quest', 'favorite color']
    >>> answers = ['lancelot', 'the holy grail', 'blue']
    >>> for q, a in zip(questions, answers):
            print('What is your {0}?  
            It is {1}.'.format(q, a))
  • 相关阅读:
    js实现H5、触摸屏数字键盘
    MAC 下node.js初体验 开发环境搭建
    手动搭建一个完整的angular实践项目
    js实现H5页面手指滑动刻度尺
    JavaScript中的事件循环机制
    CentOS6.5安装教程
    通过ecplise导入mysql的jar包时,右键找不到build path问题
    Java数据库之数据库的连接操作
    Java基础之文件的输入输出流操作
    数据库约束
  • 原文地址:https://www.cnblogs.com/jinggs/p/14310111.html
Copyright © 2011-2022 走看看