日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python如何复制一个变量_Python中变量、赋值、浅拷贝、深拷贝

發(fā)布時(shí)間:2024/1/23 python 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python如何复制一个变量_Python中变量、赋值、浅拷贝、深拷贝 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

在理解淺拷貝和深拷貝之前,首先要理解學(xué)習(xí)一下變量在Python中是怎樣存儲(chǔ)的;

變量的類型是分值引用與地址引用兩種.

python的一切變量都是對象,變量的存儲(chǔ),采用了地址引用的方式,存儲(chǔ)的只是一個(gè)變量的值所在的內(nèi)存地址,而不是這個(gè)變量的只本身。

在Python中,是有多種數(shù)據(jù)類型:bool、int、long、float、string、list、dict、tuple、set;

其中可分為基本數(shù)據(jù)類型和復(fù)雜數(shù)據(jù)結(jié)構(gòu);

基本數(shù)據(jù)類型:bool、int、long、float、string;

復(fù)雜數(shù)據(jù)結(jié)構(gòu):list、dict、tuple、set;(對于能存儲(chǔ)基本數(shù)據(jù)類型的變量可以把它看做復(fù)雜數(shù)據(jù)結(jié)構(gòu))

由于Python中的變量存儲(chǔ)都是地址引用,所以說復(fù)雜數(shù)據(jù)結(jié)構(gòu)(list、dict、tuple、set)中存儲(chǔ)的變量也僅僅是變量的地址。

一、變量的初始化(賦值):

1.Python中變量的初始化就是在內(nèi)存中新開辟一塊存儲(chǔ)變量的值的內(nèi)存,把這塊內(nèi)存的地址賦值給變量。(變量中存的是值的地址)

1 >>> str_1 = 'abc'

2 >>>id(str_1)3 4300773168

4 >>> str_2 =str_15 >>>id(str_2)6 4300773168

在給已經(jīng)初始化的變量重新初始化的時(shí)候,就會(huì)重新更改變量中的地址。

1 >>> str_1 = 123

2 >>>id(str_2)3 4300773168

4 >>>id(str_1)5 4297541792

2.而在復(fù)雜數(shù)據(jù)結(jié)構(gòu)中,更改數(shù)據(jù)結(jié)構(gòu)中的元素(基本數(shù)據(jù)類型),僅僅是改變了這個(gè)元素的地址,而不會(huì)影響復(fù)雜數(shù)據(jù)結(jié)構(gòu)本身的地址。

1 >>> list_1 =[1,2,3]2 >>>id(list_1)3 4320183368

4 >>> list_1.append(9)5 >>> list_1[2] = 22

6 >>> list_1.pop(2)7 3

8 >>> print(list_1,id(list_1))9 [1, 2, 22, 5, 6, 9] 4320183368

通過上邊的事例做出結(jié)論:

當(dāng)復(fù)雜數(shù)據(jù)結(jié)構(gòu)(list、dict、tuple、set)賦值時(shí),是在計(jì)算機(jī)中開辟一塊內(nèi)存來存儲(chǔ)這個(gè)復(fù)雜數(shù)據(jù)結(jié)構(gòu)的值,而修改其中元素的時(shí)候只是更改了復(fù)雜數(shù)據(jù)結(jié)構(gòu)的元素的地址,不會(huì)影響復(fù)雜數(shù)據(jù)結(jié)構(gòu)的地址(就像一個(gè)桌子上有坐著兩個(gè)人,而桌子上的菜兩個(gè)人是共同享有);當(dāng)重新賦值時(shí),會(huì)重新開辟新的內(nèi)存來存儲(chǔ)變量的值,把這塊內(nèi)存的地址存到變量中。(相當(dāng)于桌子上的一個(gè)人移到了另一個(gè)桌子上吃)

二、拷貝:

在Python中,我們有時(shí)候要保存一份數(shù)據(jù),再去對這塊數(shù)據(jù)進(jìn)行處理,而這個(gè)時(shí)候Python提供了兩種拷貝方式:淺拷貝、深拷貝。

1.淺拷貝

淺拷貝: 不管是多么復(fù)雜的數(shù)據(jù)結(jié)構(gòu),淺拷貝只會(huì)拷貝第一層.

1 importcopy2 list_1 = [1,2,['a','b','c'],3]3 list_2 =list_1[:]4 #list_2 = copy.copy(list_1)淺拷貝的另一種方式

5 list_1[2][1] = 'kk'

6 print(list_1,list_2,id(list_1[2]),id(list_2[2]))7 [1, 2, ['a', 'kk', 'c'], 3] [1, 2, ['a', 'kk', 'c'], 3] 43305137364330513736

由于淺拷貝只會(huì)拷貝list_1的第一層,所以元素中的list的地址沒有被更改,說明list_1和list_2共享同一個(gè)第二層的list。

2.深拷貝:

深拷貝會(huì)完全復(fù)制原變量的所有數(shù)據(jù),在內(nèi)存中生成一套完全一樣的內(nèi)容,我們對這兩個(gè)變量中的一個(gè)進(jìn)行任意修改都不會(huì)影響另一個(gè)變量。

1 importcopy2 list_1 = [1,2,['a','b','c'],3]3 list_2 =copy.deepcopy(list_1)4 list_1[2][1] = 'kk'

5 print(list_1,list_2,list_1[2],list_2[2])6 [1, 2, ['a', 'kk', 'c'], 3] [1, 2, ['a', 'b', 'c'], 3] 4330513736 4330512584

總結(jié)

以上是生活随笔為你收集整理的python如何复制一个变量_Python中变量、赋值、浅拷贝、深拷贝的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。