Python 小章的自动化接口日记和生活分享 -- 懒了ヾ (◍°∇°◍) ノ゙

哇咔咔 · 2021年04月02日 · 最后由 陈恒捷 回复于 2021年04月02日 · 2748 次阅读

今天没写代码,就看了会 python 的视频
分享下视频上看到的题目

info = [1,2,3]
userinfo = {"account":info,"num":info,"money":info}
info.append(9)
print(userinfo)
info = 'aaaaa'
print(userinfo)
info = [1,2,3]
 userinfo =[info,info,info,info]
 userinfo[2][0]="aaa"
 print(info,userinfo)
import copy
 v1 = [1,2,3,{'name':'元宝','number':[7,77,88]}]
 v2 = copy.deepcopy(v1)
 print(v1 is v2)
 print(v1[0] is v2[0])
 print(v1[3] is v2[3])
 print(v1[3]['name'] is v2[3]['name'])
 print(v1[3]['number'] is v2[3]['number'])
 print(v1[3]['number'][1] is v2[3]['number'][1])
共收到 6 条回复 时间 点赞

让我想起 abandon 的故事。。。

恒温 回复

哈哈哈 今天继续

楼主加油,坚持就是胜利。

PS:没看懂这题目是在干嘛?array 和 dictionary 的基本使用?

中间的那个不是很明白,😅 小白求解。

陈恒捷 回复

看懂了,讲的应该是基本类型和引用类型,以及两种类型在赋值的时候值是怎么传递的。

野鹤兄 回复

说下我的理解

# 数组是引用类型,所以把[1,2,3]的内存地址引用赋值给info这个变量
info = [1,2,3]

# 把4个info的内存地址引用,赋值到数组里,然后整个数组的内存地址引用赋值给 userinfo
userinfo =[info,info,info,info]

# 因为是地址引用,所以 userinfo[2] 实际上对应的是 info 的内存地址,所以 userinfo[2] 等价于 info (其实 userinfo[0]、userinfo[1] 也是一样的,可以用 id(userinfo[0]) 查看对应的内存地址进行比较),这里改了 info 里面第一个元素的值为 "aaa"
userinfo[2][0]="aaa"

# 最终结果:['aaa', 2, 3] [['aaa', 2, 3], ['aaa', 2, 3], ['aaa', 2, 3], ['aaa', 2, 3]]
print(info,userinfo)

倒是第一道题掉坑里了,最后的 userinfo 里面没有 'aaaaa' ,因为里面存储的还是原来 info 传的数组内存地址

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册