美文网首页
Python中的赋值及深浅拷贝

Python中的赋值及深浅拷贝

作者: 一只小柴犬啊 | 来源:发表于2020-03-04 01:19 被阅读0次

Python中的赋值及深浅拷贝

赋值

示例

# 赋值
a = ['aa', 'bb', 14, 12]
b = a
print('a:{}\nb:{}'.format(a, b))
print('a的内存地址:{}\nb的内存地址:{}'.format(id(a), id(b)))  # a,b内存地址相同,指向内存中同一个区域。
a[0] = 1
print("执行了‘a[0] = 1’后".center(50, '*'))
print('a:{}\nb:{}'.format(a, b))  # a的值发生改变,b的值也随之发生改变
print('a的内存地址:{}\nb的内存地址:{}'.format(id(a), id(b)))  # a,b内存地址相同,指向内存中同一个区域。
b[1] = 2
print("执行了‘b[1] = 2’后".center(50, '*'))
print('a:{}\nb:{}'.format(a, b))  # b的值发生改变,a的值也随之发生改变
print('a的内存地址:{}\nb的内存地址:{}'.format(id(a), id(b)))  # a,b内存地址相同,指向内存中同一个区域。

打印

a:['aa', 'bb', 14, 12]
b:['aa', 'bb', 14, 12]
a的内存地址:140362409249160
b的内存地址:140362409249160
******************执行了‘a[0] = 1’后******************
a:[1, 'bb', 14, 12]
b:[1, 'bb', 14, 12]
a的内存地址:140362409249160
b的内存地址:140362409249160
******************执行了‘b[1] = 2’后******************
a:[1, 2, 14, 12]
b:[1, 2, 14, 12]
a的内存地址:140362409249160
b的内存地址:140362409249160

浅拷贝

示例

# 浅拷贝
a = ['aa', [1, 2, 3], 'bb', 14, 12]
b = a.copy()  # 浅拷贝
print('a:{}\nb:{}'.format(a, b))
print('a的内存地址:{}\nb的内存地址:{}'.format(id(a), id(b)))  # a,b内存地址不同
b[0] = 'cc'
print("执行了b[0] = 'cc'后".center(50, '*'))
print('a:{}\nb:{}'.format(a, b))  # 只改变(b[0] = 'cc')最外层列表时,b[0] = 'cc',a[1][0] = 1,a[0]的值无变化
print('a的内存地址:{}\nb的内存地址:{}'.format(id(a), id(b)))  # a,b内存地址不同
b[1][0] = 10
print("执行了‘a[1][0] = 10’后".center(50, '*'))
print('a:{}\nb:{}'.format(a, b))  # 改变(b[1][0] = 10)第二层列表中的值时,b[1][0] = 10,a[1][0] = 10
print('a的内存地址:{}\nb的内存地址:{}'.format(id(a), id(b)))  # a,b内存地址不同

打印

a:['aa', [1, 2, 3], 'bb', 14, 12]
b:['aa', [1, 2, 3], 'bb', 14, 12]
a的内存地址:139809337808456
b的内存地址:139809337809160
*****************执行了b[0] = 'cc'后******************
a:['aa', [1, 2, 3], 'bb', 14, 12]
b:['cc', [1, 2, 3], 'bb', 14, 12]
a的内存地址:139809337808456
b的内存地址:139809337809160
****************执行了‘a[1][0] = 10’后****************
a:['aa', [10, 2, 3], 'bb', 14, 12]
b:['cc', [10, 2, 3], 'bb', 14, 12]
a的内存地址:139809337808456
b的内存地址:139809337809160

深拷贝

示例

# 深拷贝
import copy
a = ['aa', [1, 2, 3], 'bb', 14, 12]
b = copy.deepcopy(a)  # 深拷贝
print('a:{}\nb:{}'.format(a, b))
print('a的内存地址:{}\nb的内存地址:{}'.format(id(a), id(b)))  # a,b内存地址不同
b[0] = 'cc'
print("执行了b[0] = 'cc'后".center(50, '*'))
print('a:{}\nb:{}'.format(a, b))  # 改变(b[0] = 'cc')最外层列表时,b[0] = 'cc',a[0] = 'aa',a[0]值无变化
print('a的内存地址:{}\nb的内存地址:{}'.format(id(a), id(b)))  # a,b内存地址不同
b[1][0] = 10
print("执行了‘a[1][0] = 10’后".center(50, '*'))
print('a:{}\nb:{}'.format(a, b))  # 改变(b[1][0] = 10)第二层列表中的值时,b[1][0] = 10,a[1][0] = 1,a[1][0]无变化
print('a的内存地址:{}\nb的内存地址:{}'.format(id(a), id(b)))  # a,b内存地址不同

打印

a:['aa', [1, 2, 3], 'bb', 14, 12]
b:['aa', [1, 2, 3], 'bb', 14, 12]
a的内存地址:139961185536008
b的内存地址:139961185537288
*****************执行了b[0] = 'cc'后******************
a:['aa', [1, 2, 3], 'bb', 14, 12]
b:['cc', [1, 2, 3], 'bb', 14, 12]
a的内存地址:139961185536008
b的内存地址:139961185537288
****************执行了‘a[1][0] = 10’后****************
a:['aa', [1, 2, 3], 'bb', 14, 12]
b:['cc', [10, 2, 3], 'bb', 14, 12]
a的内存地址:139961185536008
b的内存地址:139961185537288

三层列表演示

示例

# 三层列表示例
import copy
a = ['aa', [['哈哈哈', '呵呵呵'], 1, 2, 3], 'bb', 14, 12]
c = a.copy()  # 浅拷贝
b = copy.deepcopy(a)  # 深拷贝
print('a:{}\nb:{}\nc:{}'.format(a, b, c))
print('a的内存地址:{}\nb的内存地址:{}\nc的内存地址:{}'.format(id(a), id(b), id(c)))  # a,b,c内存地址不同
a[1][0][1] = '啦啦啦'
print("执行了a[1][0][1]='啦啦啦'后".center(50, '*'))
print('a:{}\nb:{}\nc:{}'.format(a, b, c))  # c浅拷贝的值随着a的改变而发生变化,b深拷贝的值无变化.
print('a的内存地址:{}\nb的内存地址:{}\nc的内存地址:{}'.format(id(a), id(b), id(c)))  # a,b,c内存地址不同

打印

a:['aa', [['哈哈哈', '呵呵呵'], 1, 2, 3], 'bb', 14, 12]
b:['aa', [['哈哈哈', '呵呵呵'], 1, 2, 3], 'bb', 14, 12]
c:['aa', [['哈哈哈', '呵呵呵'], 1, 2, 3], 'bb', 14, 12]
a的内存地址:140291239103560
b的内存地址:140291239103432
c的内存地址:140291239103496
***************执行了a[1][0][1]='啦啦啦'后***************
a:['aa', [['哈哈哈', '啦啦啦'], 1, 2, 3], 'bb', 14, 12]
b:['aa', [['哈哈哈', '呵呵呵'], 1, 2, 3], 'bb', 14, 12]
c:['aa', [['哈哈哈', '啦啦啦'], 1, 2, 3], 'bb', 14, 12]
a的内存地址:140291239103560
b的内存地址:140291239103432
c的内存地址:140291239103496

相关文章

  • Python中的赋值及深浅拷贝

    Python中的赋值及深浅拷贝 赋值 示例 打印 浅拷贝 示例 打印 深拷贝 示例 打印 三层列表演示 示例 打印

  • 简介深浅拷贝

    深浅拷贝 python 直接赋值,浅拷贝和深拷贝 直接赋值 其实就是对象的引用 (可以理解成浅拷贝) 浅拷贝: 拷...

  • copy见解

    拷贝就是拷贝,何来深浅之说? Python中,对象的赋值,拷贝(深/浅拷贝)之间是有差异的,如果使用的时候不注意,...

  • Python中的赋值、深浅拷贝

    拷贝对象的意义在于:如果需要在不更改源数据的情况下,修改数据,此时需要一个拷贝对象 python提供copy来完成...

  • python中的赋值,深浅拷贝

    这个是Python中的比较重要的知识点。 自己画了一个知识导图,下面再详细解释。 本文有三个方面的问题要说明: 1...

  • Python对象的引用,深拷贝和浅拷贝

    前言 在Python中,Python对象的赋值,深浅拷贝之间是有差异的,今天就来总结一下三者之间的区别. 对象赋值...

  • python中的赋值与深浅拷贝

    对于赋值运算来说,l1与l2指向的是同一个内存地址,所以他们是完全一样的。 对于浅copy来说,第一层创建的是新的...

  • Python中的引用赋值,深拷贝,浅拷贝

    摘要:Python,引用赋值,深拷贝,浅拷贝 总结一下Python中的变量的引用赋值,深拷贝和浅拷贝,先上结论 赋...

  • 深、浅拷贝

    说到深浅拷贝,Python和其他语言一样也涉及到内存分配问题,对象的赋值和拷贝有很大差别,赋值是把变量和内存某块连...

  • 什么是深拷贝什么是浅拷贝,分别在什么时候用

    根据拷贝内容的不同,分为深浅拷贝 深拷贝:指针赋值,且内容拷贝 浅拷贝:只是简单的指针赋值 苹果为什么这么设计呢?...

网友评论

      本文标题:Python中的赋值及深浅拷贝

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