zoukankan      html  css  js  c++  java
  • Python 切片与深拷贝

    一:深拷贝与浅拷贝:

    1..a 与a[:]

    a[:] 是深复制 ,在python的赋值中,是通过对象的地址引用进行的赋值,a[:]修改的是堆中的内容,意思是指针还指向这里;而a是浅复制,修改a就新开辟了一个地址空间:

    如下图:

    2.b = a && b = a[:] or b = a.copy()的区别;

    b=a将两者指向同一个对象; b = a[:]/a.copy()都属于“浅拷贝”,只拷贝最外层元素,内层嵌套元素则通过引用,而不是独立分配内存。

    >>> a = [1,2,['A','B']]
    >>> b = a
    >>> b[0]=9
    >>> b[2][0]='d'
    >>> a
    [9, 2, ['d', 'B']]
    >>> c = a[:]
    >>> c[0] = 22
    >>> c[2][0] = 'l'
    >>> a
    [9, 2, ['l', 'B']]
    >>> b
    [9, 2, ['l', 'B']]
    >>> c
    [22, 2, ['l', 'B']]
    

    二.数组切片

    切片操作基本表达式:object[start_index:end_index:step]
    start_index, end_index, step >>>+/-

    start_index、end_index、step可同为正、同为负,也可正负混合使用。但必须遵循一个原则,否则无法正确切取到数据:当start_index的位置在end_index的左边时,表示从左往右取值,此时step必须是正数(同样表示从左往右);当start_index的位置在end_index的右边时,表示从右往左取值,此时step必须是负数(同样表示从右往左),即两者的取值顺序必须是相同的。对于特殊情况,当start_index或end_index省略时,起始索引和终止索引由step的正负来决定,不会存在取值方向出现矛盾的情况(即不会返回空列表[]),但正和负取到的结果是完全不同的,因为一个向左一个向右。

     


  • 相关阅读:
    jq-demo-阻止冒泡,阻止默认行为
    jq-demo-轮播图
    jq-demo-点击选择(英雄联盟)
    jq-demo-tab切换
    jq-demo-拖拽
    hdu 4031 Attack 线段树
    codeforces 633C. Spy Syndrome 2 hash
    sublime模式下开启vim并修改esc
    codevs 1256 打鼹鼠 LIS
    codevs 1455 路径 计算m^n%p
  • 原文地址:https://www.cnblogs.com/dolphin-bamboo/p/11569458.html
Copyright © 2011-2022 走看看