集合及深浅copy
集合set={}
集合是无序的,不重复的数据集合,它里面的元素是可哈希的(不可变类型),但是集合本身是不可哈希(所以集合做不了字典的键)的。以下是集合最重要的两点:
1.去重,把一个列表变成集合,就自动去重了。
2.关系测试,测试两组数据之前的交集、差集、并集等关系。
深浅copy
1.赋值运算
# l1 = [1,2,3,['cat','dog']] # l2=l1 # l1[0]=4 #print(l1) = [4, 2, 3, ['cat', 'dog']] #print(l2) = [4, 2, 3, ['cat', 'dog']] # l1[3][0]='big' # print(l1) = [1, 2, 3, ['big', 'dog']] # print(l2) = [1, 2, 3, ['big', 'dog']] 对于赋值运算来说,l1与l2指向的是同一个内存地址,所以他们是完全一样的。
2.浅copy
# l1 = [1,2,3,['cat','dog']] # l2=l1.copy() # print(l1,id(l1))=[1, 2, 3, ['cat', 'dog']] 35482376 # print(l2,id(l2))=[1, 2, 3, ['cat', 'dog']] 35523464 # l1[0]=5 # print(l1,id(l1[0)=[5, 2, 3, ['cat', 'dog']] 1564828000 # print(l2,id(l1[0])=[1, 2, 3, ['cat', 'dog']]1564827872 # l1[3][1]=5 # print(l1,id(l1[3][1]))=[1, 2, 3, ['cat', 5]] 1564828000 # print(l2,id(l2[3][1]))=[1, 2, 3, ['cat', 5]] 1564828000 对于浅copy来说,第一层创建的是新的内存地址,而从第二层开始,指向的都是同一个内存地址,所以,对于第二层以及更深的层数来说,保持一致性.
3.深copy
# l1 = [1,2,3,['barry','alex']] # l2 = copy.deepcopy(l1) # print(l1,id(l1)) # [1, 2, 3, ['barry', 'alex']] 2915377167816 # print(l2,id(l2)) # [1, 2, 3, ['barry', 'alex']] 2915377167048 # l1[1] = 222 # print(l1,id(l1)) # [1, 222, 3, ['barry', 'alex']] 2915377167816 # print(l2,id(l2)) # [1, 2, 3, ['barry', 'alex']] 2915377167048 # l1[3][0] = 'wusir' # print(l1,id(l1[3])) # [1, 222, 3, ['wusir', 'alex']] 2915377167240 # print(l2,id(l2[3])) # [1, 2, 3, ['barry', 'alex']] 2915377167304 对于深copy来说,两个是完全独立的,改变任意一个的任何元素(无论多少层),另一个绝对不改变。