集合 copy


#
集合的建立 # set = set(["barry",1,2]) # print(set) # set1 = {1,2,3} #集合的增 # set1 = {'alex','wusir','ritian','egon','barry'} # set1.add("taibai") # # set1.update("taibai") #迭代追加 # print(set1) # # set1 = {'alex','wusir','ritian','egon','barry'} # # set1.pop() #隨機刪 # # set1.remove("alex") #指定元素刪 # # set1.clear() #清空集合 # del set1 #刪除集合 # print(set1) #交集 # set1 = {1,2,3,4,5} # set2 = {4,5,6,7,8} # print(set1 & set2) # {4, 5} # print(set1.intersection(set2)) # {4, 5} #並集 # set1 = {1,2,3,4,5} # set2 = {4,5,6,7,8} # print(set1 | set2) # {1, 2, 3, 4, 5, 6, 7} # print(set2.union(set1)) # {1, 2, 3, 4, 5, 6, 7} #差集 # set1 = {1,2,3,4,5} # set2 = {4,5,6,7,8} # print(set1 - set2) # {1, 2, 3} # print(set1.difference(set2)) # {1, 2, 3} #反差集 # set1 = {1,2,3,4,5} # set2 = {4,5,6,7,8} # print(set1 ^ set2) # {1, 2, 3, 6, 7, 8} # print(set1.symmetric_difference(set2)) # {1, 2, 3, 6, 7, 8} #子集 是判斷返回True或者False # ) # 這兩個相同,都是說明set2是set1超集set1 = {1,2,3} # # set2 = {1,2,3,4,5,6} # # print(set1 < set2) # # print(set1.issubset(set2)) # 這兩個相同,都是說明set1是set2子集。 # # print(set2 > set1) # # print(set2.issuperset(set1) #集合屬於可變的類型,集合裏面的元素屬於不可變類型 #frozenset 將集合凍結,使其成爲不可變類型 # s = frozenset("barry") # print(s,type(s))

 集合set

  集合要求裏面的元素必須是不可變的數據類型,即int,字符串,bool。可是集合自己屬於可變的數據類型面試

  集合裏面的元素是不重複的(因此具備自然去重的特色),集合是無序的app

  主要做用是:測試

    1.去重  (面試題:將list去重)spa

        l1 = [1,1,2,1,3,4,5,6,4,2,"alex","alex"]code

     作法: set1 = set(l1)blog

        l2 = list(set1)內存

        print(l2)    #結果爲[1,2,3,4,5,6,"alex"]rem

    2.關係測試,字符串

      交集  &  intersectionit

      並集   |   union

      反交集 ^  difference

      子集  <  issubset  判斷,a,b爲倆個集合,若是是True,則說明a 是b的子集

      超集  >  issuperset            若是是False,則說明a是b的超集

  增  add  update 

  刪  pop  remove  clear(清空)   del (刪除集合)

將集合變成不可變的數據類型即  frozenset()  凍結

# s = frozenset("barry")
# print(s,type(s))        #frozenset({'y', 'b', 'a', 'r'}) <class 'frozenset'>

深淺copy

1賦值運算

  

l1 = [1,2,3]
l2 = l1
l1.append(666)
print(l1)
print(l2)
print(id(l1),id(l2))
#[1, 2, 3, 666]
[1, 2, 3, 666]

2494346240904
2494346240904

  對於賦值運算來講,l1與l2指向的是同一個內存地址,因此他們是徹底同樣的  即l1 is l2   爲True

2.淺copy

  對於淺copy來講,第一層建立的是新的內存地址,而從第二層開始,指向的都是同一個內存地址,因此,對於第二層以及更深的層數來講,保持一致性。

3.deepcopy    深拷貝

  對於深copy來講,兩個是徹底獨立的,改變任意一個的任何元素(不管多少層),另外一個絕對不改變。

  面試題(切片屬於淺copy)

  

l1 = [1,2,3,[22,33]]
l2 = l1[:]
# l1.append(666)
l1[-1].append(666)
print(l1,l2)    #[1, 2, 3, [22, 33, 666]] [1, 2, 3, [22, 33, 666]]
相關文章
相關標籤/搜索