python学习笔记------浅拷贝与深拷贝

本文详细解析了Python中is与==运算符的区别,通过实例展示了两者如何判断对象的身份与值,并进一步介绍了浅拷贝与深拷贝的概念及其应用场景。
is 和 == 有和区别
# id: 在内存中存储的位置
# type: 变量的;类型
# value: 值是否相等;
# == 判断:   type, value
# is 判断:    type, value, id

# 结论:
#  is表示的是对象标识符;表示两个变量的值是否在同一块内存空间;
#  ==表示的是值是否相等;

# 总结: is返回值为True, ==返回一定是True;
浅拷贝与深拷贝
li = [1,2,3,4]

# 不是拷贝, 是将li1的指向li的内存位置;
li1 = li
li1.append(5)
print (li)
print(li1 is li)

# 拷贝列表成功
li2 = li[:]
print(li2 is li)
li2.append(5)
print(li)
print(li2)


# 浅拷贝
li = [1, 2, 3, [2, 3]]

li3 = li[:]
print(li3 is li)
print(li3[-1][0] is li[-1][0])

li3[-1].append(0)
print(li)
print(li3)

# import copy
# li = [1, 2, 3, [2, 3]]
# li3 = copy.copy(li)
# li3[-1].append(1)
# print (li)
# print (li3)

# 深拷贝
import copy
li = [1, 2, 3, [2, 3]]
li4 = copy.deepcopy(li)

print(li is li4)
li4[-1].append(0)
print(li)
print(li4)

实验结果如下:

[1, 2, 3, 4, 5]
True
False
[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5, 5]
False
True
[1, 2, 3, [2, 3, 0]]
[1, 2, 3, [2, 3, 0]]
[1, 2, 3, [2, 3, 1]]
[1, 2, 3, [2, 3, 1]]
False
[1, 2, 3, [2, 3]]
[1, 2, 3, [2, 3, 0]]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值