python基础之赋值/深copy/浅copy

首先,不管是赋值还是深浅copy,都是针对那些可能会产生变化的值进行区分的,也就是对于数字,字符串来说,区分赋值,深浅copy是毫无意义的。

那么,让我们来对那些可变的像list set dict tuple……来进行探讨。

赋值:

  有两种修改n的方法:

  1  直接对n赋值

>>> n=[1,2]
>>> g=n
>>> id(n)
140529062430792
>>> id(g)
140529062430792
>>> n=[1,3]
>>> g
[1, 2]
>>> id(n)
140529062430920
>>> id(g)
140529062430792

  2  对n的某个元素进行赋值

>>> n=[1,2]
>>> g=n
>>> id(n)
140529062430728
>>> id(g)
140529062430728
>>> n[1]=3
>>> g
[1, 3]
>>> id(n)
140529062430728
>>> id(g)
140529062430728

浅copy

>>> import copy
>>> name=[‘tong‘,‘yang‘]>>> n=[1,name]>>> g=copy.copy(n)>>> g[1, [‘tong‘, ‘yang‘]]>>> id(n)140529062259976>>> id(g)140529062259848
#两个变量(n和g)的地址不相同

  当修改n的name的元素时:

>>> name[1]=‘hua‘
>>> n
[1, [‘tong‘, ‘hua‘]]
>>> g
[1, [‘tong‘, ‘hua‘]]
>>> id(n)
140529062259976
>>> id(g)
140529062259848
#n和g的值相同,并且内存地址都没有改变

  浅copy只会copy一层,所以在上例中n和g的值都改变了。

深copy

>>> name=[‘tong‘,‘yang‘]
>>> n=[1,name]
>>> g=copy.deepcopy(n)
>>> g
[1, [‘tong‘, ‘yang‘]]   #g的第二个元素已经不是变量name了。
>>> id(n)
140529062430728
>>> id(g)
140529062259976
#n与g的地址不同

  当修改name的元素时:

>>> name[1]=‘hua‘
>>> n
[1, [‘tong‘, ‘hua‘]]
>>> g
[1, [‘tong‘, ‘yang‘]]
#n的值变了,但g的值没有变。深copy会copy所有层。

  深copy则会copy所有层,并且会将其中的变量的值直接输出取代变量。

本文参考了:http://www.cnblogs.com/wupeiqi/articles/5133343.html

时间: 2024-10-13 21:36:32

python基础之赋值/深copy/浅copy的相关文章

【C/C++学院】(6)构造函数/析构函数/拷贝构造函数/深copy浅copy

1.构造函数 类的初始化即为构造函数.也为:隐式的初始化. 构造函数在对象初始化的时候,自动被调用.隐式的调用. 构造函数分为三种:有参构造函数.无参构造函数.拷贝构造函数. 有参构造函数调用有三种:括号法.等号法.手工法. #include <iostream> using namespace std; class Test { private: int m_a; public: Test()//无参构造函数 { } Test(const Test &obj)//拷贝构造函数 { }

深、浅copy

深.浅copy多用于列表 浅copy:第一层中不变的数据是独立的,可变类型元素指向同一块内存地址 l1 = [1,2,3,["a","b"]] l2 = l1.copy() l1.append(666) print(l1) print(l2) --------- [1, 2, 3, ['a', 'b'], 666] [1, 2, 3, ['a', 'b']] ---------- # print(id(l1),id(l2)) #4335432200 43354341

python学习笔记-(六)深copy&amp;浅copy

在python中,对象赋值实际上是对象的引用.当创建一个对象,然后把它赋给另一个变量的时候,python并没有拷贝这个对象,而只是拷贝了这个对象的引用. 1. 赋值 赋值其实只是传递对象引用,引用对象id是一样的.原始列表改变,被赋值的b也会做相同的改变. 1 2 3 4 5 6 7 8 9 10 11 12 13 >>> alist = [1,2,3,["a","b"]] >>> b = alist >>> p

Day2-Python基础2---浅copy、深copy的差别

浅copy 首先我们来看下面一段代码: 1 1 >>> names = ["maqing"," peilin"," xiaoming"," lilei"," hanmeimei",["maqing","wangchuan","lilong"]] 2 2 >>> names2 = names.copy() 3 3

python 全栈 python基础 (四)运算 copy

字符串的格式化 在字符串中插入 %s ,作为占位符,后边儿再定义插入变量. 算术运算 % 取模   判断奇偶数 / 除法   有小于号 // 取整除  返回整数部分 逻辑运算 and or not 'str'.isdigit() 是判断一个字符串能否转换成数字 布尔运算 以下几种情况为假! []空列表 {}空字典 ()空元组,空集合 ''空字符串 0 位运算 == 二进制运算 列表的copy   浅copy与深copy的关系  用在内存占位的 id 理解! 字典 中的 fromkeys() 从序

浅copy 与 深copy

1 import copy 2 names = ["zhangyang", 'guyun', 'xiangpeng', ['jack','tom'], 'xuliangchen'] 3 names2 = names.copy() #浅copy,复制后改变原列表,copy后的列表不发生改变 4 5 6 names[2] = "祥鹏" 7 names.append("zhangshan") 8 9 print(names) 10 print(name

基础数据类型之集合和深浅copy,还有一些数据类型补充

集合 集合是无序的,不重复的数据集合,它里面的元素是可哈希的(不可变类型),但是集合本身是不可哈希(所以集合做不了字典的键)的.以下是集合最重要的两点: 去重,把一个列表变成集合,就自动去重了. 关系测试,测试两组数据之前的交集.差集.并集等关系. #关于集合和波尔值之间的苟苟且且# set ={1,2,3,4,5,True,(1,2,3),} #集合具有自动去重和去空格功能# set.add(False)# set.add(True) #打印结果显示,没有Teue,应该是集合内部的数字和元组不

python基础第二课

一  认识模块 1.1  sys #!/usr/bin/env python3 # Author: Sam Gao import sys print(sys.path) #打印PYTHONPATH环境变量 # ['/home/sam/PycharmProjects/s14/day1', # '/home/sam/PycharmProjects/s14', # '/usr/lib/python35.zip', # '/usr/lib/python3.5', # '/usr/lib/python3.

Python基础3 文件操作、字符编码与转码

文件操作 对文件操作过程 打开文件,得到文件句柄赋值给变量 操作 关闭文件 打开文件的模式有: r,只读模式(默认). w,只写模式.[不可读:不存在则创建:存在则删除内容:] a,追加模式.[可读:   不存在则创建:存在则只追加内容:] "+" 表示可以同时读写某个文件 r+,可读写文件.[可读:可写:可追加] w+,写读 a+,同a "U"表示在读取时,可以将 \r \n \r\n自动转换成 \n (与 r 或 r+ 模式同使用) rU r+U "b