zoukankan      html  css  js  c++  java
  • python基础-短路和拷贝

     1 #3、短路运算:逻辑运算的结果一旦可以确定,那么就以当前处计算到的值作为最终结果返回
     2 >>> 10 and 0 or '' and 0 or 'abc' or 'egon' == 'dsb' and 333 or 10 > 4
     3 我们用括号来明确一下优先级
     4 >>> (10 and 0) or ('' and 0) or 'abc' or ('egon' == 'dsb' and 333) or 10 > 4
     5 短路:       0      ''            'abc'                    
     6             假     假              真
     7 
     8 返回:                            'abc'
     9 
    10 #4、短路运算面试题:
    11 >>> 1 or 3
    12 1
    13 >>> 1 and 3
    14 3
    15 >>> 0 and 2 and 1
    16 0
    17 >>> 0 and 2 or 1
    18 1
    19 >>> 0 and 2 or 1 or 4
    20 1
    21 >>> 0 or False and 1
    22 False
    短路
     1 import copy
     2 
     3 list1 = [
     4     'egon',
     5     'lxx',
     6     [1, 2]
     7 ]
     8 
     9 # 1、二者分隔不开,list改list2也跟着该,因为指向的就是同一个地址
    10 list2 = list1  # 这不叫copy
    11 list1[0] = 'EGON'
    12 print(list2)
    13 print(id(list1), id(list2))
    14 
    15 # 2、需求:
    16 # 1、拷贝一下原列表产生一个新的列表
    17 # 2、想让两个列表完全独立开,并且针对的是改操作的独立而不是读操作
    18 
    19 
    20 # 3、如何copy列表
    21 # 3.1 浅copy:是把原列表第一层的内存地址不加区分完全copy一份给新列表
    22 list1 = [
    23     'egon',
    24     'lxx',
    25     [1, 2]
    26 ]
    27 
    28 list3 = list1.copy()
    29 print(list3)
    30 print(id(list1))
    31 print(id(list3))
    32 
    33 print(id(list1[0]), id(list1[1]), id(list1[2]))
    34 print(id(list3[0]), id(list3[1]), id(list3[2]))
    35 
    36 # 实验1:对于不可变类型的赋值,都是产生了新值,让原列表的索引指向新的
    37 # 内存地址,并不会影响新列表
    38 list1[0] = 'EGON'
    39 list1[1] = 'LXX'
    40 print(list3)
    41 # list1[2]=123
    42 
    43 # 实验2:但对于可变类型,我们可以改变可变类型中包含的值,但内存地址不变
    44 # 即原列表的索引指向仍然指向原来的内存地址,于是新列表也跟着一起受
    45 # 影响,如下
    46 list1[2][0] = 111
    47 list1[2][1] = 222
    48 print(list1)
    49 print(list3)
    50 
    51 # 综合实验1和实验2可以得出,要想copy得到的新列表与原列表的改操作完全独立开
    52 # 必须有一种可以区分开可变类型与不可变类型的copy机制,这就是深copy
    53 
    54 # 3.2 深copy
    55 
    56 list1 = [
    57     'egon',
    58     'lxx',
    59     [1, 2]
    60 ]
    61 
    62 list3 = copy.deepcopy(list1)
    63 print(id(list1))
    64 print(id(list3))
    65 print(list3)
    66 
    67 #          不可变        不可变        可变
    68 print(id(list1[0]), id(list1[1]), id(list1[2]))
    69 print(id(list3[0]), id(list3[1]), id(list3[2]))
    70 '''
    71 2325701850864 2325701851440 2325710359936
    72 2325701850864 2325701851440 2325710360128
    73 '''
    74 print(list3)
    75 print(id(list1[2][0]), id(list1[2][1]))
    76 print(id(list3[2][0]), id(list3[2][1]))
    77 
    78 list1[0] = 'EGON'
    79 list1[1] = 'LXX'
    80 
    81 list1[2][0] = 111
    82 list1[2][1] = 222
    83 print(list1)
    84 
    85 print(list3)
    拷贝
    每天学习新的知识,会让自己更加充实
  • 相关阅读:
    状态机
    perl学习之五:列表和数组
    正则语言(转的 大额_skylar )
    算法分析-动态规划(最优二叉搜索树)
    算法分析-动态规划(矩阵链相乘,最长公共子序列,最长递增子序列)
    算法分析-动态规划(装配线调度)
    算法分析-leedcode正则题目
    算法分析-动态规划(cut_rod)
    算法分析-分治法的主方法【转的 凭海临风】
    正则表达式之match与exec【转的 楼兰之风】
  • 原文地址:https://www.cnblogs.com/fengpiaoluoye/p/14052994.html
Copyright © 2011-2022 走看看