美文网首页
python中的深浅copy

python中的深浅copy

作者: 心若向Yang_无畏悲伤 | 来源:发表于2019-05-12 14:30 被阅读0次

深浅拷贝:数据分离情况

1. =赋值:数据完全共享(指向内存中的同一个对象)

被赋值的变量指向的数据和原变量的数据都是指向内存中的同一个地址:

(1)如果是不可变数据类型(数字、字符串等),修改其中的一个值,实际是修改了变量指向与值对应的地址(相当于重新被赋值),因此会同时发生变化;
(2)如果是可变数据类型(列表、字典等),在修改数据时仅仅是其本身的地址指向发生了改变,但是指向可变数据类型的地址并未改变,因此会同时发生改变。

print("以下是赋值")
a=[1,2,"4",[4,5]]
b=a
print(a)
print(b)

b[0]=11
b[3][0]=44
print(a)
print(b)


结果:
以下是赋值
[1, 2, '4', [4, 5]]
[1, 2, '4', [4, 5]]
[11, 2, '4', [44, 5]]
[11, 2, '4', [44, 5]]

2. 浅copy:数据半共享(仅可变数据类型指向同一个对象)

复制其数据独立内存存放(新建一个地址指向),但是只拷贝成功第一层:

(1)如果是不可变数据类型(数字、字符串等),修改其中一个变量的值,由于浅copy的两个变量的地址指向独立,因此只有本身值被修改的变量发生变化,另一个不会改变;
(2)如果是可变数据类型(列表、字典等),在修改数据时仅仅是其本身的地址指向发生了改变,但是指向可变数据类型的地址并未改变,因此会同时发生改变。

print("以下是浅拷贝")

a=[1,2,"4",[4,5]]
b=a.copy()
print(a)
print(b)

b[0]=11
b[3][0]=44
print(a)
print(b)

结果:
以下是浅拷贝
[1, 2, '4', [4, 5]]
[1, 2, '4', [4, 5]]
[1, 2, '4', [44, 5]]
[11, 2, '4', [44, 5]]

3. 深copy:数据完全不共享(数据独立,互不影响)

复制其数据完完全全放独立的一个内存,完全拷贝,数据不共享:

(1)如果是不可变数据类型(数字、字符串等),修改其中一个变量的值,由于深copy的两个变量的地址指向独立,因此只有本身值被修改的变量发生变化,另一个不会改变;
(2)如果是可变数据类型(列表、字典等),在修改数据时仅仅是其本身的地址指向发生了改变,由于是深copy,指向可变数据类型的地址完全独立,因此另一个变量不会发生改变。

print("以下是深拷贝")

import copy
a=[1,2,"4",[4,5]]
b=copy.deepcopy(a)
print(a)
print(b)

b[0]=11
b[3][0]=44
print(a)
print(b)

结果:
以下是深拷贝
[1, 2, '4', [4, 5]]
[1, 2, '4', [4, 5]]
[1, 2, '4', [4, 5]]
[11, 2, '4', [44, 5]]

相关文章

  • python中的深浅copy

    深浅拷贝:数据分离情况 1. =赋值:数据完全共享(指向内存中的同一个对象) 被赋值的变量指向的数据和原变量的数据...

  • Python——"is" , "==" and "深浅copy"

    1."is" 和 "=="的区别是什么? == 比较的是变量的值 is 比较的是变量的内存地址 例如 : a = ...

  • python——深浅copy

    通过下面的输出结果可以很好的看到: 1)深拷贝是直接复制了所有的父对象跟子对象,原来的不管怎么变都跟他没关系 2)...

  • 内存管理

    ARC MRC 属性 循环引用 深浅copy一 ,先说深浅copy概念很简单 浅copy 就是copy...

  • 6、python集合,深浅copy

    集合,深浅copy 一、集合 集合是无序的,不重复的数据集合,它里面的元素是可哈希的(不可变类型),但是集合本身是...

  • python 的深浅copy 与 赋值

    赋值 对于赋值运算,就是共同指向一个内存地址,将一个值赋予一个变量,那么它的内存地址同时也赋予了他,如果值是不可变...

  • 深浅copy

    概念:浅拷贝:不拷贝对象,只拷贝对象指针,因此不会产生新的对象。深拷贝:拷贝对象到新的内存,因此会产生新的对象。 ...

  • 深浅copy

    深浅copy 浅拷贝:指针拷贝,复制一个新的指针,指向同一块内存区域。实际内存并没有发生拷贝 深拷贝:内容拷贝,拷...

  • Python 百度面试总结

    1、 考查知识点:列表,深浅copy。弄清楚就ok 2、 用python , 123456789变成9876543...

  • python中copy和deepcopy的使用方法

    python2中,需要import copy模块 python3中,直接可以使用copy()方法,但deepcop...

网友评论

      本文标题:python中的深浅copy

      本文链接:https://www.haomeiwen.com/subject/vmscaqtx.html