dict、set

本文详细讲解了Python中dict的浅拷贝与深拷贝的区别,通过实例展示了它们在内存引用、修改后的同步性上的不同,并介绍了如何使用`copy`和`deepcopy`进行复制。同时涵盖了dict的扩展、获取键值、以及set的基本操作,如差集、并集和交集,以及增删元素的演示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、dict和list中copy的方法

dict浅拷贝

dict_data = {1: [1, 2, 3]}
dict_data2 = dict_data.copy()
print(dict_data2)
print(dict_data2[1])
print(id(dict_data2[1]))
print(id(dict_data[1]))
dict_data[1][1] = 4
print(id(dict_data))
print(id(dict_data2))
{1: [1, 2, 3]}
[1, 2, 3]
1817902392384
1817902392384
1817902325568
1817902325824

随着父目录变化子目录随之变化

2、dict的深拷贝

import copy
dict_data = [1, 2, 3]
dict_data2 = copy.deepcopy(dict_data)
print(dict_data2)
print(id(dict_data[1]))
print(id(dict_data2[1]))
dict_data[1] = 0
print(id(dict_data[1]))
print(id(dict_data2[1]))
[1, 2, 3]
1836514437456
1836514437456
1836514437392
1836514437456

深拷贝独立不会因为父目录改变而子目录改变

list浅拷贝

list_data = [1, 2, 3]
list_data2 = list_data.copy()
print(list_data2)
print(id(list_data[1]))
print(id(list_data2[1]))
list_data2[0] = 2
print(id(list_data[0]))
print(id(list_data2[0]))
[1, 2, 3]
1671108061520
1671108061520
1671108061488
1671108061520

浅拷贝改变最外层另一个不会改变,改变最里层另一个会改变

list深拷贝

import copy
list_data = [1, 2, 3]
list_data2 = copy.deepcopy(list_data)
print(list_data2)
print(id(list_data[1]))
print(id(list_data2[1]))
list_data[0] = 2
print(id(list_data[0]))
print(id(list_data2[0]))
[1, 2, 3]
2108786764112
2108786764112
2108786764112
2108786764080

随着父目录的改变子目录不发生改变

2、dict中扩展字典长度(多种办法)

1、

dict_data = {int: 2, bytes: 1+2j, float: 3.3}
print(dict_data.setdefault(2, 4))
print(dict_data)
4
{<class 'int'>: 2, <class 'bytes'>: (1+2j), <class 'float'>: 3.3, 2: 4}

2、

dict_data = {int: 2, bytes: 1+2j, float: 3.3}
dict_data[4] = 1
print(dict_data)
{<class 'int'>: 2, <class 'bytes'>: (1+2j), <class 'float'>: 3.3, 4: 1}

3、dict中获取所有的key,获取所有的value,获取所有的item

dict_data = {1: 2, 2: 3}
print(dict_data.keys())
print(dict_data.values())
print(dict_data.items())
dict_keys([1, 2])
dict_values([2, 3])
dict_items([(1, 2), (2, 3)])

4、dict中通过一个不存在的key去获取值(要求不报错)

dict_data = {int: 2, bytes: 1+2j, float: 3.3}
dict_data.setdefault(2.2)
print(dict_data)
{<class 'int'>: 2, <class 'bytes'>: (1+2j), <class 'float'>: 3.3, 2.2: None}

5、定义空集合

set_data = {1, 2, 3}
set_data.clear()
print(set_data, type(set_data))
None
set() <class 'set'>

6、set中求差集,求合集,求交集

(1)差集

set_data = {1, 2, 3}
set_data2 = {2, 3, 4}
print(set_data.difference(set_data2))
{1}

(2)合集

set_data = {1, 2, 3}
set_data2 = {2, 3, 4}
print(set_data.union(set_data2))
{1, 2, 3, 4}

(3)交集

set_data = {1, 2, 3}
set_data2 = {2, 3, 4}
print(set_data.intersection(set_data2))
{2, 3}

增加、删除元素

set_data = {1, 2, 3}
set_data.add(4)
print(set_data)
set_data.clear()
print(set_data)
set_data.pop()
print(set_data)
set_data.remove(3)
print(set_data)
{1, 2, 3, 4}
set()
set()
{1, 2, 3}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值