• 12 python 初学(深浅拷贝、集合)


    深浅拷贝:参考:http://www.cnblogs.com/yuanchenqi/articles/5782764.html

    s = [[1, 2], 'lily', 'hello']
    s2 = s.copy()
    print(s2)
    s2[0][1] = 3
    print(s2)
    print(s)
    # >>> [[1, 2], 'lily', 'hello']
    # >>> [[1, 3], 'lily', 'hello']
    # >>> [[1, 3], 'lily', 'hello']
    # 输出结果显示当改变列表内的元素的时候,两个会一起改变

    s2 = s s2 = s.copy 是不一样的。

    s2 = s:是将 s 整体的一个内存地址直接复制给了 s2,相当于 s2 s 的一个别名,两个都指向同一块内存空间

    s2 = s.copy:是将s 内的每一份地址都拷贝了一份给 s2

    浅拷贝:只拷贝一层,不拷贝第二层

    深拷贝:克隆一份,和原来完全没关系  s2 = copy.deepcopy(s)


    set

    1. 集合的创建,只有一种方式:s = set(‘lily’) ;每个字符为 1 个单独的元素,重复的只保留一个
    2. 集合对象是一组无序排列的可哈希的值,集合成员可以做字典的键
    3. set 是无序不重复的,没有索引。  
    4. 集合分类:可变集合(set) 和 不可变集合(frozenset

           可变集合:可添加和删除元素,非可哈希的,不能用做字典的键,也不能做其他集合的元素

           不可变集合:与上面相反

        5. 集合操作:

    innot in:判断元素是否在集合中

    add():将参数作为一个元素加入集合中

    update():将参数作为一个序列,将序列中的每一个内容加入到集合中

    remove():删除某个元素

    pop():随机删除一个

    clear():清空

    6. 集合类型操作符

       in not in

       集合等价与不等价(==!=)   print(set('lilyyyy') == set('liy'))    True

       子集,超集   print(set('lilyyyy') < set('lilysu'))    True

    a = set([1, 2, 3, 4, 5])

    b = set([4, 5, 6, 7, 8])

     交集 intersection  print(a.intersection(b)) == print(a & b)

    并集 print(a.union(b)) == print(a | b)

    差集 print(a.difference(b)) == printa - b

    反向交集:print(a.symmetric_difference(b)) == printa ^ b)   反向差集

    父集(超集): a.issuperset(b) == print(a > b)

    子集:a.issubset(b) == print(a < b)


    拷贝相关:

    a = b: a、b是不可变数据类型

    '''
     b = a 语句是直接将 a 指向的内存地址赋值给 b,a、b都指向同一块内存;
     当 a 的值改变时,就指向了另一块内存
    '''
    a = 10
    b = a
    print(id(a))  # 140716184614000
    print(id(b))  # 140716184614000
    a = 5
    print(id(a))  # 140716184613776
    print(id(b))  # 140716184614000

    图解:

    a = b: a、b是可变数据类型

    s = [1, 'lily', ' hello']
    s2 = s
    print(id(s))  # 707924288072
    print(id(s2))  # 707924288072
    s[0] = 3
    print(s)  # [3, 'lily', ' hello']
    print(s2)  # [3, 'lily', ' hello']
    print(id(s))  # 500697752136
    print(id(s2))  # 500697752136

    图解:

  • 相关阅读:
    构造与析构的次序
    为什么析构函数常声明为虚函数
    偏移数组的二分查找
    字符串循环右移N位
    const 补充
    对类 sizeof
    指针与引用
    python小练习
    初学数据挖掘——相似性度量(一)
    每天进步一点点(二)
  • 原文地址:https://www.cnblogs.com/mlllily/p/10242267.html
Copyright © 2020-2023  润新知