python学习-day5_作业(集合,深浅拷贝)

学习视频地址:https://www.bilibili.com/video/BV1SE411N7Hi?p=38
作业地址:https://gitee.com/old_boy_education_python_28/teaching_plan/issues/I163NZ
以下内容仅供自己学习使用

#!/usr/bin/env python 
# -*- coding:utf-8 -*-
# 1.有如下
v1 = {'郭宝元','alex','板哥','王二麻子'}
v2 = {'alex','王二麻子'}
# 请得到 v1 和 v2 的交集并输出
print(v1&v2)
# 请得到 v1 和 v2 的并集并输出
print(v1|v2)
# 请得到 v1 和 v2 的 差集并输出
print(v1-v2)
# 请得到 v2 和 v1 的 差集并输出
print(v2-v1)
#
# 2.循环提示用户输入,如果输入的内容在v1中存在,则追加到v2中,如果v1中不存在,则添加到v1中。(如果输入N或n则停止循环)

# v=input("enter,n or N to end:")
# while v!='n' and v !='N':
#     if v in v1:
#         v2.add(v)
#     else:
#         v1.add(v)
#     print('v1:', v1)
#     print("v2:", v2)
#     v = input("enter,n or N to end:")


# 3.is 和 == 的区别?
#is是判断两边内存地址是否相同
#==是判断两边值是否相同
# 4.type和id的作用?
#type输出类型
#id输出内存地址
# 5.看代码写结果并解释原因
#
v1 = {'k1':'v1','k2':[1,2,3]}
v2 = {'k1':'v1','k2':[1,2,3]}
result1 = v1 == v2
result2 = v1 is v2
print(result1)
print(result2)
# True
# False
#值相同,内存地址不同

print("---------6")
# 6.看代码写结果并解释原因
#
v1 = {'k1':'v1','k2':[1,2,3]}
v2 = v1
result1 = v1 == v2
result2 = v1 is v2
print(result1)
print(result2)
# True
# True
#v2=v1,将v2,v1指向同一个内存地址,所以两者内存地址相同,值也相同

print("-------7")
# 7.看代码写结果并解释原因
#
v1 = {'k1':'v1','k2':[1,2,3]}
v2 = v1
v1['k1'] = 'meet'
print(v2)
#v2,v1指向同一个内存地址,所以当v1改变,v2也一起变

print("-------8")
# 8.看代码写结果并解释原因
#python是内存地址引用,列表里面存的都是内存地址,不是真正的数据
v1 = '人生苦短,我用Python'
v2 = [1,2,3,4,v1]
v1 = "人生苦短,用毛线Python"
print(v2)
#[1, 2, 3, 4, '人生苦短,我用Python']
#"用python“开辟空间,v1指向了“用python”内存地址,v2中的元素5也指向了“用python”内存地址,
# “用毛线python”开辟空间,后面v1重新指向了“用毛线python”开辟空间,v2指向不变,元素5还是指向“用python”空间

print("-------9")
# 9.看代码写结果并解释原因
#
info = [1,2,3]
userinfo = {'account':info, 'num':info, 'money':info}#此处值还是内存地址
info.append(9)
print(userinfo)
info = "题怎么这么多"
print(userinfo)

# {'account': [1, 2, 3, 9], 'num': [1, 2, 3, 9], 'money': [1, 2, 3, 9]}
# {'account': [1, 2, 3, 9], 'num': [1, 2, 3, 9], 'money': [1, 2, 3, 9]}
#info指向[]的内存地址
#userinfo中的值指向[]列表内存地址,当列表内容改变时,内存地址不变,print userinfo跟着改变
#info不再指向[]的内存地址,指向了“”字符串的内存地址,userinfo指向没有改变

print("--------10")
# 10.看代码写结果并解释原因
#
info = [1,2,3]
userinfo = [info,info,info,info,info]
info[0] = '不仅多,还特么难呢'
print(info,userinfo)
#['不仅多,还特么难呢', 2, 3] [['不仅多,还特么难呢', 2, 3], ['不仅多,还特么难呢', 2, 3],
#['不仅多,还特么难呢', 2, 3], ['不仅多,还特么难呢', 2, 3], ['不仅多,还特么难呢', 2, 3]]

print("--------11")
# 11.看代码写结果并解释原因
#
info = [1,2,3]
userinfo = [info,info,info,info,info]
userinfo[2][0] = '他扒拉我'
print(info,userinfo)
#['他扒拉我', 2, 3] [['他扒拉我', 2, 3], ['他扒拉我', 2, 3],
#['他扒拉我', 2, 3], ['他扒拉我', 2, 3], ['他扒拉我', 2, 3]]

print("--------12")
# 12.看代码写结果并解释原因

data = {}
for i in range(10):
    data['user'] = i
print(data)
#{'user': 9}

print("--------13")
# 13.看代码写结果并解释原因
#
data_list = []#010 [020,020,020……]
data = {}#020 {'user':9}
for i in range(10):
    data['user'] = i#1.增,2.改,3.改……
    data_list.append(data)#010.append(020)
print(data_list)
#[{'user': 9}, {'user': 9}, {'user': 9}, {'user': 9}, {'user': 9},
# {'user': 9}, {'user': 9}, {'user': 9}, {'user': 9}, {'user': 9}]


print("--------14")
# 14.看代码写结果并解释原因
#
data_list = []#010
for i in range(10):
    data = {}#012 {'user':0},每转一圈,开辟一个新空间,013 {'user':1}
    #小数据池的驻留机制
    #数字,字符串,布尔值,不可变数据类型
    data['user'] = i
    data_list.append(data) #010.append(012), 010.append(013)……
print(data_list)
#[{'user': 0}, {'user': 1}, {'user': 2}, {'user': 3}, {'user': 4},
# {'user': 5}, {'user': 6}, {'user': 7}, {'user': 8}, {'user': 9}]

print("--------15")
# 15.看代码写结果(以下内容如果不是很清楚的多画画图)
#
v1 = [1,2,3,4,5]
v2 = [v1,v1,v1]
v1.append(6)
print(v1)
print(v2)
# [1, 2, 3, 4, 5, 6]
# [[1, 2, 3, 4, 5, 6], [1, 2, 3, 4, 5, 6], [1, 2, 3, 4, 5, 6]]

print("--------16")
# 16.看代码写结果
#
v1 = [1,2,3,4,5]
v2 = [v1,v1,v1]
#v2=[[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5]]
v2[1][0] = 111
#v2=[[111,2,3,4,5],[111,2,3,4,5],[111,2,3,4,5]]
v2[2][0] = 222
#v2=[[222,2,3,4,5],[222,2,3,4,5],[222,2,3,4,5]]
print(v1)
print(v2)
# [222, 2, 3, 4, 5]
# [[222, 2, 3, 4, 5], [222, 2, 3, 4, 5], [222, 2, 3, 4, 5]]

print("--------17")
# 17.看代码写结果,并解释每一步的流程。
#
v1 = [1,2,3,4,5,6,7,8,9]
v2 = {}
for item in v1:#循环列表获取每个元素
    if item < 6:
        continue#跳过此循环,进行下一次循环
    if 'k1' in v2:
        v2['k1'].append(item)#如果存在就通过k1获取值,并添加当前元素
    else:#k1不在v2的字典中存在时
        v2['k1'] = [item]#添加一对的键值对
print(v2)
#{'k1': [6, 7, 8, 9]}

print("--------18")
# 18.看代码写结果
#
import copy
v1 = "alex"
#小数据池驻留机制:数字,字符串,布尔值
#只要是自己定义的,只要内容一致,不管长度多少,就是共用同一个内存地址
v2 = copy.copy(v1)
v3 = copy.deepcopy(v1)
print(v1 is v2)#true
print(v1 is v3)#true

print("--------19")
# 19.看代码写结果
#
import copy
v1 = [1,2,3,4,5]
#列表、字典等可变数据类型,没有小数据池驻留情况
v2 = copy.copy(v1)#新开一壳
v3 = copy.deepcopy(v1)#新开一壳

print(v1 is v2)#false
print(v1 is v3)#false

print("-------20")
# 20.看代码写结果
#
import copy
v1 = [1,2,3,4,5]
v2 = copy.copy(v1)
v3 = copy.deepcopy(v1)
#数字属于不变元素,深浅拷贝都共用,下面全部为true
print(v1[0] is v2[0])
print(v1[0] is v3[0])
print(v2[0] is v3[0])

print("--------21")
# 21.看代码写结果
#
import copy
v1 = [1,2,3,4,[11,22]]
v2 = copy.copy(v1)
v3 = copy.deepcopy(v1)

print(v1[-1] is v2[-1])#true,浅拷贝只拷贝第一层
print(v1[-1] is v3[-1])#false,深拷贝,可变元素开辟新空间
print(v2[-1] is v3[-1])#false,深拷贝,可变元素开辟新空间


print("--------22")
# 22.看代码写结果
#
import copy

v1 = [1,2,3,{"name":'宝元',"numbers":[7,77,88]},4,5]

v2 = copy.copy(v1)
#浅拷贝只拷贝第一层,不变元素共用,可变元素联动
print(v1 is v2) #false新开了一个壳,v1,v2内存地址不同
#下面全部为true
print(v1[0] is v2[0])
print(v1[3] is v2[3])

print(v1[3]['name'] is v2[3]['name'])
print(v1[3]['numbers'] is v2[3]['numbers'])#注意,这个是t
print(v1[3]['numbers'][1] is v2[3]['numbers'][1])

print("-------23")
# 23.看代码写结果
#
import copy
v1 = [1,2,3,{"name":'宝元',"numbers":[7,77,88]},4,5]
v2 = copy.deepcopy(v1)
#deepcopy,不变元素共用,可变元素开辟新空间
print(v1 is v2)
#false
print(v1[0] is v2[0])
#true
print(v1[3] is v2[3])
#false
print(v1[3]['name'] is v2[3]['name'])
#true,"宝元“属于不变元素
print(v1[3]['numbers'] is v2[3]['numbers'])
#false,false属于可变元素
print(v1[3]['numbers'][1] is v2[3]['numbers'][1])
#true,数字属于不变元素
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值