本篇文章为大家展示了Python中赋值、浅拷贝,深拷贝三者的区别,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
Python有哪些常用库
Python常用的库:1. requesuts; 2. scrapy; 3.枕头;4.扭曲;5. numpy; 6. matplotlib; 7. pygama; 8. ipyhton等。
一、赋值
不会开辟新的内存空间,只是复制了新对象的引用。所以当一个数据发生变化时,另外一个数据也会随之改变。
二,,浅拷贝
创建新对象,其内容是对原对象的引用。浅拷贝之所以称为浅拷贝,是因为它仅仅只拷贝了第一层,即只拷贝了最外层的对象本身,内部的元素都只是拷贝了一个引用而已,即内部元素如果被修改,则另外一个数据也会发生变化。
浅拷贝的三种形式:
A =, (1,, 2,, 3,, 4]
- <李>
切片操作
李>#,第1种 B =, [:] #,第2种 B =, [a for a 一个拷贝)
- <李>
工厂函数
李>B =,列表(A)
- <李>
复制函数
李>B =, copy.copy (A)
浅拷贝要分两种情况进行讨论:
1)当浅拷贝的值是不可变对象(例如字符串,元组,数值类型)时,和赋值情况一样,对象的内存地址(id())与浅拷贝原来的值一致。
2)当浅拷贝的值是可变对象(例如列表,字典,集合等)时,也需要分两种情况讨论:
首先,原来值的内存地址与拷贝后的内存地址不同。
- <李>
当要拷贝的对象里面,没有可变的子对象时,原来值(拷贝值)的改变并不会影响拷贝值(原来值)。
李> <李>当要拷贝的对象里面,有可以改变的子对象时,改变该子对象,原来值和拷贝值之间会互相影响。
李>三、深拷贝
深拷贝拷贝出来的对象是一个全新的对象,和原来的对象没有任何的关联。改变原有对象不会影响新的拷贝对象。
四例子
- <李>
不可变对象
李>import 副本 #,不可变对象 #,A =,(1,, 2,, & # 39;你好,),,,#,元组 1 #,A =,,,,,,,,,,,,,,,,,, #,数的值 时间=A & # 39;你好,,,,,,,,,,,,,,#,字符串 print(“* * * * * * * *赋值* * * * * * * *“) B =, 打印(id (A)) 打印(id (B)) print () 打印(B) print(“* * * * * * * *浅拷贝* * * * * * * *“) 时间=B copy.copy (A) 打印(id (A)) 打印(id (B)) print () 打印(B) print(“* * * * * * * *深拷贝* * * * * * * *“) 时间=B copy.deepcopy (A) 打印(id (A)) 打印(id (B)) print () 打印(B)
结果:
* * * * * * * *赋值* * * * * * * *
引用>
1894005658264
1894005658264
你好
* * * * * * * *浅拷贝* * * * * * * *
1894005658264
1894005658264
你好
* * * * * * * *深拷贝* * * * * * * *
1894005658264
1894005658264
你好
<李>
可变对象
李>import 副本 #,可变对象 A =, (1, 2, 3] print(“* * * * * * * *赋值* * * * * * * *“) B =, 打印(id (A)) 打印(id (B)) print () 打印(B) print(“* * * * * * * *浅拷贝* * * * * * * *“) 时间=B copy.copy (A) 打印(id (A)) 打印(id (B)) print () 打印(B) print(“* * * * * * * *深拷贝* * * * * * * *“) 时间=B copy.deepcopy (A) 打印(id (A)) 打印(id (B)) print () 打印(B)结果:
* * * * * * * *赋值* * * * * * * *
引用>
1602694308360
1602694308360
[1, 2, 3]
[1, 2, 3]
* * * * * * * *浅拷贝* * * * * * * *
1602694308360
1602694308360
[1, 2, 3]
[1, 2, 3]
* * * * * * * *深拷贝* * * * * * * *
1602694308360
1602694308360
[1, 2, 3]
(1、2、3)<李>
可变对象修改外层
李>import 副本 #,可变对象 时间=A [1,, 2,, 3,,[11日,10日,20]] #,可变对象的外层修改 时间=B1 A ,,,,,,,,,,,,,,,,,, #,赋值 时间=B2 copy.copy (A),,,,,,,, #,浅拷贝 时间=B3 copy.deepcopy (A),,,, #,深拷贝 A.append (4) print(“* * * * * * * *赋值* * * * * * * *“) 打印(id (A)) 打印(id (B1)) print () 打印(B1) print(“* * * * * * * *浅拷贝* * * * * * * *“) 打印(id (A)) 打印(id (B2)) print () 打印(B2) print(“* * * * * * * *深拷贝* * * * * * * *“) 打印(id (A)) 打印(id (B3)) print () 打印(B3)Python中赋值、浅拷贝,深拷贝三者的区别