zoukankan      html  css  js  c++  java
  • 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')
    
  • 相关阅读:
    算法训练 表达式计算
    基础练习 十六进制转十进制
    基础练习 十六进制转十进制
    基础练习 十六进制转十进制
    New ways to verify that Multipath TCP works through your network
    TCP的拥塞控制 (Tahoe Reno NewReno SACK)
    Multipath TCP Port for Android 4.1.2
    How to enable ping response in windows 7?
    NS3
    Multipath TCP Port for Android
  • 原文地址:https://www.cnblogs.com/letlifestop/p/10262821.html
Copyright © 2011-2022 走看看