• python 第二章 对象与类型


    可变对象和不可变对象

    1,可变对象,list(列表),dict(字典),集合(set),字节数组。

    2,不可变对象,数值类型,字符串,字节串,元组(具体形式 ())。

    注意条件:可变和不可变指的是该对象指向的内存是否可以改变。当修改不可变对象的时候,它会重新复制一份,然后再改变相应的值,原来的那一分就会相当与垃圾被去除。

    >>> print(id(aee))
    140375930246848
    >>> aee+= ()
    >>> print(id(aee))// 加了一个空元素之后,元祖的地址改变了。
    140375898807608
    
    >>> stra= '12'
    >>> print(id(stra))
    140375899220376
    >>> stra+= ''
    >>> print(stra)
    12
    >>> print(id(stra))// 加了一个空字符的时候,字符串的地址并没有被改变。  int同理。但是float的话,会有精度问题
    140375899220376
    

    变量与对象的关系(多个变量共享引用同一对象)

    1,不可变对象之间的改变不会互相影响

    >>> a=1
    >>> print(a)
    1
    >>> b=a
    >>> print(b)
    1
    >>> b=2
    >>> print(b)
    2
    >>> print(a)
    1
    

    2,可变对象之间的改变会相互影响

    >>> a=[1,23,4]
    >>> print(a)
    [1, 23, 4]
    >>> b=a
    >>> print(b)
    [1, 23, 4]
    >>> b.append(188)
    >>> print(b)
    [1, 23, 4, 188]
    >>> print(a)
    [1, 23, 4, 188]
    

    我觉得这个地方恰好解释了可变对象和不可变对象之间的区别,可变对象直接改变的是地址,所以指向这个地址的量对应的会发生改变,而不可变对象“修改”的原理是新开辟一段内存,把原来的内容复制过来,然后再进行相应的改变。

    数字整数类型

    十进制,1,23等等

    十六进制,0X或者0x开头。

    八进制,0O开头。

    二进制,0B开头。

    int不受位数的限制,只收内存的限制。

    字符串(python中只接受unicode编码)

    索引,切片

    索引是取出一个字符,切片是取出一片字符。

    >>> s="huangqingxiang"
    >>> len(s)
    14
    >>> s[0]// 从第0位开始,长度是14的话,最后一位的编号为13
    'h'
    >>> s[-14]// 如果是从右边开始数的话,开始为-1
    'h'
    >>> [-1]
    [-1]
    >>> s[-1]
    'g'
    >>> s[13]
    'g'
    >>> s[14]
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    IndexError: string index out of range
    >>> s[5:8]//截取从编号为5的字符串到第7位停止,左必右开
    'qin'
    >>> s[5:]//从编号为5的开始往后所有的字符串都截取出来
    'qingxiang'
    >>> s
    'huangqingxiang'
    

    单个字符的字符串问题

    >>> s='A'
    >>> ord(s)//当前字符的ascii编码,ord是得到当前字符串的Unicode编码
    65
    >>> chr(s)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: an integer is required (got type str)
    >>> chr(65)//ascii编码对应的字母
    'A'
    

    对encode()函数和decode()函数的初级理解

    字面意思,encode指的是编码,decode指的是解码

    >>> u='s'
    >>> s1=u.encode('gb2312')//这里的gb2312指的是一种编码方式,获得bytes类型的类型对象
    >>> s1
    b's'
    >>> s2=s1.decode('gb2312')
    >>> s2
    's'
    

    字节串(不可变对象)

    字节串类似于字符串,可以进行连接,重复运算。但是字节串是由单个字节组成的串,他的值是不可显示的代码,所以字节串是二进制数据,字符串值是文本数据序列。具体形式,数据的开始是以字母’b'或者‘B'开始,以单,双引号个三引号引起来的字节串。’

    >>> x=b'xffxf1x01'
    >>> type(x)
    <class 'bytes'>
    >>> x=B'xffxf1x01'
    >>> type(x)
    <class 'bytes'>
    >>> x=bytes(10)
    >>> x
    b'x00x00x00x00x00x00x00x00x00x00'
    

    字节数组

    >>> bytearray()
    bytearray(b'')
    >>> x=bytearray(10)
    >>> x
    bytearray(b'x00x00x00x00x00x00x00x00x00x00')
    
  • 相关阅读:
    解决WordPress不能发邮件,WordPress 无法发送邮件
    WordPress 显示 Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 2097160 bytes)解决办法
    怎么优雅的取消重复请求ajax
    手拉手搭建一个脚手架
    数据库隔离级别RC与RR区别——MVCC、ReadView
    整理一下下一步的计划
    减肥
    EBS: Shift + F6: 当复制上行记录
    Oracle 表值函数之多表关联使用
    EBS: 序号授权 GRANT
  • 原文地址:https://www.cnblogs.com/letlifestop/p/10262821.html
Copyright © 2020-2023  润新知