Python基础 H-01 补充知识=、copy、deepcopy直接差异

补充知识=、copy、deepcopy直接差异

一、对应不可变数据类型(数字,字符串,元组)

a、代码实例
# 导入系统模块
import copy
# 设置环境变量

# 导入自定义模块

str1 = 'abcd'
str2 = str1
str3 = copy.copy(str1)
str4 = copy.deepcopy(str1)

print('id(str1)是[%s]' % id(str1))
print('id(str2)是[%s]' % id(str2))
print('id(str3)是[%s]' % id(str3))
print('id(str4)是[%s]' % id(str4))

"""输出结果
id(str1)是[4478900184]
id(str2)是[4478900184]
id(str3)是[4478900184]
id(str4)是[4478900184]
"""
b、结论
  • 有上述代码可以看出,对应不可变数据类型,无论是赋值=、copy、deepcopy,其id都是同一个值。故对任意一个变量str1、str2、str3、str4操作都会有影响。

二、对应可变数据类型(列表、字典)

a、代码实例
# 导入系统模块
import copy
# 设置环境变量

# 导入自定义模块

list1 = [0, 1, ['a', 'b', 'c'], 3]

list2 = list1
list3 = copy.copy(list1)
list4 = copy.deepcopy(list1)

print('id(list1)是[%s], id(list1[0])是[%s], id(list1[2])是[%s]' % (id(list1), id(list1[0]), id(list1[2])))
print('id(list2)是[%s], id(list2[0])是[%s], id(list2[2])是[%s]' % (id(list2), id(list2[0]), id(list2[2])))
print('id(list3)是[%s], id(list3[0])是[%s], id(list3[2])是[%s]' % (id(list3), id(list3[0]), id(list3[2])))
print('id(list4)是[%s], id(list4[0])是[%s], id(list4[2])是[%s]' % (id(list4), id(list4[0]), id(list4[2])))

"""输出结果
id(list1)是[4366404488], id(list1[0])是[4364038256], id(list1[2])是[4366442632]
id(list2)是[4366404488], id(list2[0])是[4364038256], id(list2[2])是[4366442632]
id(list3)是[4366693448], id(list3[0])是[4364038256], id(list3[2])是[4366442632]
id(list4)是[4366693512], id(list4[0])是[4364038256], id(list4[2])是[4366693192]
"""
b、结论
  • 通过id(listX)的结果,我们知道了,对于可变数据类型,赋值操作,是指向同一个内存地址。copy和deepcopy是指向新的一个内存地址。值相同但内存地址变了。故list1变化会影响list2,反之list2变化影响list1,因为是同一个内存地址。

  • 通过id(listX[0])的结果,我们知道了,对应可以数据类型中的不可变数据类型。比如列表数据中的0值。无论是赋值=、copy还是deepcopy 都是指向同一个内存地址。

  • 通过id(listX[2])的结果,我们知道了,对应可以数据类型中的可变数据类型。比如列表数据中的['a', 'b', 'c'] ,赋值= 和 copy 是分配的同一个内存地址, 但deepcopy是指向新的内存地址。故list1、list2、list3 的 listX[2]变化,会相互影响,因为listX[2]是相同内存地址。但不会影响list4[2]。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值