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,數字屬於不變元素
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章