Python中赋值、浅拷贝,深拷贝三者的区别

  介绍

本篇文章为大家展示了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中赋值、浅拷贝,深拷贝三者的区别