python基础数据类型:深浅(copy)___007

1、赋值运算(赋值是同一个内存地址)

(1)列表

例子:

li = [1,2,3]
li1 = li
li.append('barry')
print(li,id(li))  # [1, 2, 3, 'barry'] 4874824
print(li1,id(li1))  # [1, 2, 3, 'barry'] 4874824

(2)字典

例子:

dic1 = {
"name":"江河",
"age":18,
"heigh":180
}
dic2 = dic1
dic1.setdefault('address','北京')
print(dic1,id(dic1))  # {'name': '江河', 'age': 18, 'heigh': 180, 'address': '北京'} 30834192
print(dic2,id(dic2))  # {'name': '江河', 'age': 18, 'heigh': 180, 'address': '北京'} 30834192

如图:

(3)字符串

例子:

s = 'alex'
s1 = s
s = s.replace('a','A')
s1 = s.replace('e','E')
print(s,id(s))  # Alex 36902536
print(s1,id(s1)) # AlEx 36932888

2、深浅(copy)

(1)浅copy:对于浅copy来说,第一层创建的是新的内存地址,而从第二层开始,指向的是同一个内存地址,对于第二层以及

更深层次来说,保持一致性

例子:浅copy()和赋值不一样

浅copy()列表、字典都一样,以list列表为例

例子1:

li = [1,2,3]
li1 = li.copy()   # id内存地址不一样,创建一个新的内存空间
li.append('添加')
print(li,id(li))  # [1, 2, 3, '添加'] 30302792
print(li1,id(li1))  # [1, 2, 3] 30302856

例子2:

嵌套(第二层内存地址一致)  :整体的内存地址不一样,嵌套的内存地址一样

li1 = [1,2,3,[33,44,55],4,5,6]
li2 = li1.copy()
li1.append(66)
print(li1,id(li1),li1[3],id(li1[3]))  # [1, 2, 3, [33, 44, 55], 4, 5, 6, 66] 4874888 [33, 44, 55] 4874824
print(li2,id(li2),li2[3],id(li2[3])) 
 # [1, 2, 3, [33, 44, 55], 4, 5, 6] 31132616 [33, 44, 55] 4874824

(2)深copy():对于深copy()来说,两个是完全独立,改变任意一个元素(无论多少层),另一个内存地址绝对不会改变

例子:

import copy
li1 = [1,2,3,[33,44,55],4,5,6]
li2 = copy.deepcopy(li1)
# 改变第一层
li1.append(15)
print(li1,id(li1),li1[3],id(li1[3]))  
# [1, 2, 3, [33, 44, 55], 4, 5, 6, 15] 35468808 [33, 44, 55] 35470024
print(li2,id(li2),li2[3],id(li2[3]))
# [1, 2, 3, [33, 44, 55], 4, 5, 6] 35613896 [33, 44, 55] 35613960

# 改变第二层
li1[3].append(66)
print(li1,id(li1),li1[3],id(li1[3]))
# [1, 2, 3, [33, 44, 55, 66], 4, 5, 6, 15] 35468808 [33, 44, 55, 66] 35470024
print(li2,id(li2),li2[3],id(li2[3]))
# [1, 2, 3, [33, 44, 55], 4, 5, 6] 35613896 [33, 44, 55] 35613960

3、enumerate()    :用于将一个可遍历的数据对象(如:列表、字符串或元组)组合成为一个索引序列,同时列出数据和数据下标,一般用在for循环中

enumerate(sequence,[start=0])

sequence---一个序列可迭代的对象,start----下标起始位置

例子

li = ['alex','taibai','wusir','egon']
for i in li:
    print(li.index(i),i)

for index ,i in enumerate(li,2):
    print(index,i)

猜你喜欢

转载自blog.csdn.net/weixin_41253809/article/details/84400862
今日推荐