美文网首页
python中的序列切片 2019-11-23(未经允许,禁止转

python中的序列切片 2019-11-23(未经允许,禁止转

作者: 9_SooHyun | 来源:发表于2019-11-23 17:03 被阅读0次

    1.python切片返回新对象且切片时下标安全

    python中的list、str等数据类型的实例对象都可以使用[:]进行切片操作。使用[:]进行一次切片操作会返回一个新的对象,并且[:]切片是下标安全的,不会发生index out of range

    python序列切片
    如图,对s进行两次相同的切片操作,分别赋值给b c,而b c是2个不同的对象;同时,切片时给的起始位置明显是溢出的,但切片操作正常结束,说明[:]切片是下标安全的

    2.python切片操作进行了浅拷贝

    浅拷贝只拷贝对象的最外层
    切片是对象浅拷贝的一种
    如图,对list对象s,分别使用切片和copy.copy()进行拷贝,拷贝完成后,操作对象s的元素---进行s[0]的append操作,发现ss和sss都一同跟随变化,说明切片和copy.copy()属于浅拷贝,只拷贝了s的最外层,内部元素并未拷贝

    切片与copy.copy()浅拷贝

    3.python切片返回的新对象存储在内存中的切片对象区

    python切片产生的新对象内存地址区

    如上图,
    list对象s的内存地址是2205190810952,对它进行一次完整切片s[:],通过id(s[:])得到这次切片返回的对象的内存地址是2205190811400
    在id(s[:])结束后,s[:]对应的对象的引用为0,因此相应的内存也得到释放
    而后面的id(s[1:])、id(s[2:])等等都显示为2205190811400,说明切片产生的首个对象(引用不为0,否则内存被收回)在内存中的地址是固定的
    把s[:] s[1:]分别赋给a b,a 的地址是2205190811400,b 的地址是2205190811464。因为对象s[:]存在引用a,因此内存不被回收,b需要新开内存

    相关文章

      网友评论

          本文标题:python中的序列切片 2019-11-23(未经允许,禁止转

          本文链接:https://www.haomeiwen.com/subject/nqbhwctx.html