Python:深拷贝与浅拷贝
来源:互联网 发布:java date 加减 编辑:程序博客网 时间:2024/06/08 14:01
1.赋值,只是创建了一个变量,这个变量还是指向原来的地址
>>> d={'k1':'v1','k2':'v2','k3':'v3','k4':[1,2,3,4]}>>> d{'k3': 'v3', 'k2': 'v2', 'k1': 'v1', 'k4': [1, 2, 3, 4]}>>> d1=d>>> id(d),id(d1)(51603384L, 51603384L) #指向的变量的内存地址都一样>>>
2.浅拷贝。简单来说只是拷贝最外面一层变量。
实例:
>>> import copy>>> d2=copy.copy(d)>>> id(d),id(d2)(51603384L, 51661544L)>>>
输出结果发现d和d2所指向的地址不一样,那我们改变其中的元素
>>> d['k1']='vv1'>>> d{'k3': 'v3', 'k2': 'v2', 'k1': 'vv1', 'k4': [1, 2, 3, 4]}>>> d2{'k3': 'v3', 'k2': 'v2', 'k1': 'v1', 'k4': [1, 2, 3, 4]}>>>
发现改变其中一个元素的值对另一个的确没有什么影响。在试一试
>>> d['k4'][0]=100>>> d{'k3': 'v3', 'k2': 'v2', 'k1': 'vv1', 'k4': [100, 2, 3, 4]}>>> d2{'k3': 'v3', 'k2': 'v2', 'k1': 'v1', 'k4': [100, 2, 3, 4]}>>>
列表中的值都发生了改变。说明浅拷贝只能拷贝到第一层,无法拷贝第二层,列表就是第二层
3.深拷贝,在内存中将所有的数据重新创建一份(最后一层不拷贝,即:python内部对字符串和数字的优化)
>>> d3=copy.deepcopy(d)>>> d3{'k3': 'v3', 'k2': 'v2', 'k1': 'vv1', 'k4': [100, 2, 3, 4]}>>> d{'k3': 'v3', 'k2': 'v2', 'k1': 'vv1', 'k4': [100, 2, 3, 4]}>>> d['k4'][0]=1000>>> d{'k3': 'v3', 'k2': 'v2', 'k1': 'vv1', 'k4': [1000, 2, 3, 4]}>>> d3{'k3': 'v3', 'k2': 'v2', 'k1': 'vv1', 'k4': [100, 2, 3, 4]}深拷贝之后这两个变量互不影响了
0 0
- Python的浅拷贝与深拷贝
- python/c++ 深拷贝与浅拷贝
- Python 深拷贝与浅拷贝
- Python中的浅拷贝与深拷贝
- python 浅拷贝与深拷贝
- Python的深拷贝与浅拷贝
- Python中深拷贝与浅拷贝
- python append()与深拷贝、浅拷贝
- python浅拷贝与深拷贝
- Python 的深拷贝与浅拷贝
- python中的深拷贝与浅拷贝
- Python:深拷贝与浅拷贝
- python 赋值、浅拷贝与深拷贝
- [Python]浅拷贝与深拷贝
- Python浅拷贝与深拷贝
- Python中的浅拷贝与深拷贝
- Python的深拷贝与浅拷贝
- python-深拷贝与浅拷贝
- Leetcode 92 Reverse Linked List II
- Bluetooth Low Energy——蓝牙低功耗
- BZOJ 3158: 千钧一发 && BZOJ 3275: Number && 考试的T2【网络流
- Android 之是时候沉浸式状态栏到了
- hadoop之hdfs api的简单使用
- Python:深拷贝与浅拷贝
- 最全面的Android Webview详解
- POJ-3176-Cow Bowling
- 模拟自然动画的精髓——TimeInterpolator与TypeEvaluator
- java泛型、通配符、泛型数据和方法的用例代码
- 1097. Deduplication on a Linked List
- 【JZOJ4799】我的快乐时代
- Linux 安装 MongoDB总结
- POJ 2262 Goldbach's Conjecture 简单的素数