'''
「容器」型別: list tuple set dict
型別: str
list ---> tuple,set,dict(前提:列表必須符合[(1,''),(2,'')])
tuple ---> list
set ---> list
dict ---> list (但是只是把字典中可以儲存到列表中)
list() ---> 轉列表
str() ---> 轉字串
tuple() ----> 轉元組
set() ----> 轉集合
dict() ----> 轉字典
'''list1 = [1, 3, 5, 6, 7, 1, 3, 5, 1, 3, 5]
# list ---> tuple
tuple1 = tuple(list1)
print(tuple1)
# 轉成集合型別就可以去除重複元素
set1 = set(list1) # 將列表轉成set型別
print(set1)
# list ---》 dict
# dict1 = dict(list1)
# print(dict1)
list2 = [(1, 'aa'), (2, 'bb'), (3, 'cc'), (4, 'dd'), (5, 'ee')]
dict1 = dict(list2)
print(dict1)
tuple1 = ('1', 'a', 'y', 'o')
list3 = list(tuple1)
print(list3)
set2 =
list4 = list(set2)
print(list4)
dict2 =
list5 = list(dict2)
print(list5)
s = str(list5) # '[1, 2, 3, 4, 5]'
print(s, type(s))
print('zhangsan')
s1 = str(dict2) # ''
print(s1, type(s1))
#s2 = "['hello,''hi','world']"
r = list(s2)
print(r)
s3 = 'hello'
r = list(s3)
print(r)
'''
可變: list set dict
不可變: str int float bool tuple
淺拷貝:
1.list2 = list1.copy()
2. import copy
list3 = copy.copy(list1)
複製原列表中一模一樣的內容到一塊新的位址中
可變型別共用的是乙個位址,無論哪一方對可變型別進行了新增或者刪除操作,
位址都不會發生改變,只不過內容變化
不可變型別一開始的時候使用的也都是相同的位址,只要不可變型別中有發生改變,哪個列表發生改變
則位址改變,對另乙個列表沒有元素位址改變。
'''import copy
list1 = ['aa', 50, ['bb', 'cc', 'dd']]
# 備份
list2 = list1.copy()
# list3 = list1.copy()
list3 = copy.copy(list1)
print(id(list1), id(list2), id(list3))
print(list1)
print(list2)
print(list3)
for i in list1:
print(id(i), end='\t')
print('')
for i in list2:
print(id(i), end='\t')
print('')
for i in list3:
print(id(i), end='\t')
# print()
# print('*' * 50)
## list1[0] = 'ee'
## list2[1] = 60
## for i in list1:
# print(id(i), end='\t')
## print('')
# for i in list2:
# print(id(i), end='\t')
## print()
# print('*' * 50)##
# for i in list1:
# print(id(i), end='\t')
## print('')
# for i in list2:
# print(id(i), end='\t')
# 切片操作是淺拷貝
# list.copy()
# copy.copy()
list1 = ['aa', 50, ['bb', 'cc', 'dd']]
list2 = list1 # 賦值操作
list3 = list1[:]
list4 = list1[::-1]
print(list1)
print(list2)
print(list3)
print(list4)
print(id(list1), id(list2),id(list3),id(list4))
print(id(list1[2]),id(list3[2]),id(list4[0]))
'''
copy.deepcopy()
兩個列表中可變型別會各自使用各自(只要使用深拷貝,可變型別就會新建乙份放到備份列表)
備份列表中的可變型別位址與原列表中的可變型別的位址是不同的。
深拷貝會完全複製原變數相關的所有資料,在記憶體中生成一套完全一樣的內容,
在這個過程中我們對這兩個變數中的乙個進行任意修改,都不會影響其他變數
不可變型別與淺拷貝相同
'''import copy
list1 = ['aa', 50, ['bb', 'cc', 'dd']]
list2 = copy.deepcopy(list1)
# 31849352 31883464
print(id(list1), id(list2))
print(list1)
print(list2)
for i in list1:
print(id(i), end='\t')
print('')
for i in list2:
print(id(i), end='\t')
print('')
print('*' * 50)
print(list1)
print(list2)
for i in list1:
print(id(i), end='\t')
print('')
for i in list2:
print(id(i), end='\t')
print('')
print('*' * 50)
list1[0] = 'ee'
list2[1] = 60
print(list1)
print(list2)
for i in list1:
print(id(i), end='\t')
print('')
for i in list2:
print(id(i), end='\t')
# list2 = list1[:]
JS資料型別 深淺拷貝
1.基本資料型別有number,string,boolean,null,undefined,symbol es6新增的 也稱原始資料型別。2.js有原始值型別和引用值型別,var str hello str 0 z 無法修改 3.js記憶體分為堆記憶體和棧記憶體,棧記憶體儲存的都是有固定大小 空間的...
深淺拷貝以及深淺拷貝的方法
先考慮一種情況,對乙個已知物件進行拷貝,編譯系統會自動呼叫一種建構函式 拷貝建構函式,如果使用者未定義拷貝建構函式,則會呼叫預設拷貝建構函式。執行結果 呼叫一次建構函式,呼叫兩次析構函式,兩個物件的指標成員所指記憶體相同,name指標被分配一次記憶體,但是程式結束時該記憶體卻被釋放了兩次,會造成記憶...
拷貝和深淺拷貝
當list2為list的拷貝物件時,list內的可變資料型別變化,list2變化 list內的不可變資料型別變化,list2變化。總之 list變化list2一定變化 list 1,2,3,4,list2 list print list print list2 1,2,3,4,5 1,2,3,4,5...