• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
veryFuelong
博客园    首页    新随笔    联系   管理    订阅  订阅

菜鸟python---深浅拷贝

深浅拷贝
1.以后尽量避免
2.面试必问

赋值, =
浅拷贝
深拷贝

a = [1,2,3,4]
b = a
print(id(a),id(b))
print(a is b)

a.append(5)
print(b)

a = [1,2,3,4]
b = a
#
a.append([1,2,3])
print(b)

copy -- 拷贝
a = [1,2,3,4,5]
b = a.copy()
print(id(a[0]))
print(id(b[0]))

a = [1,2,3,[4,5]]
b = a[:] # 浅拷贝
print(id(a[-1][0]))
print(id(b[-1][0]))
a.append(9) # 010101
print(a)
print(b) # 010111




a = [1,2,3,[4,5]]
b = a[:] # 浅拷贝
a[-1].append(6)
print(b)

a = [1,2,3,[4,5,6,[9,10]],67]
b = a # 赋值
b = a[:]
a[-2].append(10)
a[-2][-1].append(10)
print(b)

a = [1,2,3,[4,5,6,[9,10]],67]
b = a[:]
b[-1] = 7
print(a)
print(b)

a = [1,2,3,[4,5,6,[9,10]],67]
b = a[:]
b[-2][-1].append(11)
print(a)
print(b)

a = [1,2,[10,7,8],4]
b = a[:]
b[-2] = 90
print(a)
print(b)

浅拷贝:只拷贝第一层元素的地址,只有修改第一层的时候源数据不受影响,
给可变数据类型进行添加的时候源数据会受影响
= 是修改 .append是添加

深拷贝:
import copy # 导入 copy模块
a = [1,2,3,[4,5],6]
b = copy.deepcopy(a)
print(id(a[-2]))
print(id(b[-2]))


print(a)
print(b)
print(a == b)
print(id(a),id(b))
print(a is b)


赋值: 将多个变量指向一个同一个内存地址就是赋值

浅拷贝: 只拷贝第一层元素的地址,只有修改拷贝的数据第一层的时候源数据不受影响,
给可变数据类型进行添加的时候源数据会受影响
= 是修改 .append是添加 可变数据类型能够修改和添加,不可变数据类型只能修改

深拷贝: 不可变数据类型内存地址共用,可变数据类型新开辟一个空间
posted @ 2020-07-21 19:34  veryFuelong  阅读(178)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3