型別轉換 深淺拷貝

2021-10-01 23:03:58 字數 3941 閱讀 3717

'''

「容器」型別: 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...