如何解析Python中的赋值、浅拷贝和深拷贝(python,开发技术)

时间:2024-05-08 11:51:40 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

先明确几点

不可变类型:该数据类型对象所指定内存中的值不可以被改变。

(1)、在改变某个对象的值时,由于其内存中的值不可以被改变,所以,会把原来的值复制一份再进行改变,这样就会计算机会开辟一段新的内存空间来存储新的值。

可变类型:该数据类型的对象所指定的地址上面的值可以被改变。

(1)、变量被改变后,其所指向的内存地址上面的值,直接被改变,没有发生复制行为,也没有发生开辟新的内存地址行为,不会重新开辟空间。

  • 变量:是一个系统表的元素,拥有指向对象的连接空间

  • 对象:被分配的一块内存,存储其所代表的值

  • 引用:是自动形成的从变量到对象的指针

当在代码编辑器中写出

test='python'

python解释器会

1.创建变量test

2.创建一个对象(分配一块内存),来存储python值

3.将变量与对象通过指针

链接起来,从变量到对象的连接称为引用(变量引用对象)

如何解析Python中的赋值、浅拷贝和深拷贝

赋值

复制了新对象的引用,不会开辟新的内存空间

如何解析Python中的赋值、浅拷贝和深拷贝

浅拷贝

拷贝父对象,不会拷贝对象内部的子对象。

1)浅拷贝是指拷贝的只是原对象元素的引用,换句话说,浅拷贝产生的对象本身是新的,但是它的内容不是新的,只是对原对象的一个引用。

2)浅拷贝是指把存放变量的地址值传给被赋值,最后两个变量引用了同一份地址。

如何解析Python中的赋值、浅拷贝和深拷贝

深拷贝

深拷贝拷贝了对象的所有元素,包括多层嵌套的元素。深拷贝出来的对象是一个全新的对象,不再与原来的对象有任何关联。所有改变原来被赋值对象不会对已经复制出来的新对象产生影响

如何解析Python中的赋值、浅拷贝和深拷贝

对于不可变对象的深浅拷贝示例

importcopytest='abc'print("=====赋值=====")b=testprint(test)print(b)print(id(test))print(id(b))print("=====浅拷贝=====")b=copy.copy(test)print(test)print(b)print(id(test))print(id(b))print("=====深拷贝=====")b=copy.deepcopy(test)print(test)print(b)print(id(test))print(id(b))

结果
=====赋值=====
abc
abc
1855476943856
1855476943856
=====浅拷贝=====
abc
abc
1855476943856
1855476943856
=====深拷贝=====
abc
abc
1855476943856
1855476943856

通过以上可得出结果:

不可变类型没有被拷贝的说法,不管怎么样id地址都一样

对于可变对象深浅拷贝示例

importcopytest=[1,2,3]print("=====赋值=====")b=testprint(test)print(b)print(id(test))print(id(b))print("=====浅拷贝=====")b=copy.copy(test)print(test)print(b)print(id(test))print(id(b))print("=====深拷贝=====")b=copy.deepcopy(test)print(test)print(b)print(id(test))print(id(b))

结果
=====赋值=====
[1, 2, 3]
[1, 2, 3]
2461497814592
2461497814592
=====浅拷贝=====
[1, 2, 3]
[1, 2, 3]
2461497814592
2461497661824
=====深拷贝=====
[1, 2, 3]
[1, 2, 3]
2461497814592
2461497661888

importcopya=[1,2,3,4,['a','b']]#原始对象b=a#赋值,传对象的引用c=copy.copy(a)#对象拷贝,浅拷贝d=copy.deepcopy(a)#对象拷贝,深拷贝a.append(5)#修改对象aa[4].append('c')#修改对象a中的['a','b']数组对象print('a=',a)print('b=',b)print('c=',c)print('d=',d)

结果
('a = ', [1, 2, 3, 4, ['a', 'b', 'c'], 5])
('b = ', [1, 2, 3, 4, ['a', 'b', 'c'], 5])
('c = ', [1, 2, 3, 4, ['a', 'b', 'c']])
('d = ', [1, 2, 3, 4, ['a', 'b']])

1.外层添加元素时,浅拷贝不会随原列表变化而变化;内层添加元素时浅拷贝才会变化

2.无论源列表如何变化,深拷贝都保持不变

3.复制对象随原列表一起变化

 </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
本文:如何解析Python中的赋值、浅拷贝和深拷贝的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:python怎样绘制堆叠条形图下一篇:

3 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18