python3 完全理解赋值,浅copy,深copy 通过地址详细理解~
额。。。老规矩,先来一天NLP再说,也没几条了。
十,在任何一个系统里,最灵活的部分是最能影响大局的部分
灵活便是有一个以上的选择,选择便是能力,因此最灵活的人便是最有能力的人。
灵活来自减少只相信自己的一套信念,价值和规条,而多凭借观察运用环境所提供的其他条件。
灵活是使事情更快有效的的重要因素,因此,亦是人生成功快乐的重要因素。
灵活亦是自信的表现,自信越不足,坚持某个模式的态度会越强硬。
容许不同的意见和可能性,便是灵活。
在一个群体中,固执使人紧张,灵活使人放松。
灵活不代表放弃自己的立场,而是容许找出双赢的可能性(更进一步而三赢)。
在沟通中,明白人不代表接受,接受不代表投降(放弃立场)。
“流水”是学习灵活的老师。
灵活是用自己的步伐去做出转变,而固执则是在被压迫的情况下做出转变。
赋值,以及深浅copy的理解
赋值的时候,是把内容的地址给这个变量,内容是不可变数据类型,如 int, str, bool, tuple,时,一个值对应一个固定的地址。
但是如果内容是可变数据类型时,如list,dict,set的时候,拿列表来举例子 : 列表整体有个地址,他是可以变化的,即两个长得一样的列表,他们整体的地址可以不同。
然后这个整体的列表地址对应的是列表各个内容,即各个元素所对应的各自的地址,比如其中一个内容是一个数字,数字是不可变类型数据,其地址是固定的一个值,如果是一个嵌套的列表,那就是再来一次整体可变地址指向内容地址。
实验结果如下:
#!usr/bin/env/ python
# -*- coding:utf-8 -*-
# Author: XiaoFeng
import copy
# 赋值 对于不可变数据类型,赋值就是相当于把数据的地址复制给变量
a = "abc" # ”abc“的地址给a
b = a # a所存的内容,即“abc"的地址复制给b
c = a # a所存的内容,即"abc"的地址复制给c
print(a, id(a))
print(b, id(b))
print(c, id(c))
c = "" # "32”的地址给c
print(a, b, c, id(a), id(b), id(c))
# 对于可变数据类型,赋值也是相当于把数据的地址复制给变量
a = [1, 2, 3] # 把列表的地址给a
b = a # 把a的内容,即列表的地址复制给b
c = a # 把a的内容,即列表的地址复制给c
print(a, id(a))
print(b, id(b))
print(c, id(c))
c.append("别人会变吗?") # 从c得到列表的地址,找到列表,然后更改列表的内容
print(a, b, c, id(a), id(b), id(c)) # 结果当然就变喽
# 浅copy
li = [1000, "sa"*30, 3, [12]] # 把列表的每一个元素的地址组合成一个列表,然后把这个列表的地址给li
li2 = li.copy() # 复制原列表的元素的地址,然后组合成一个新的列表,再把这个新列表的地址给li2
li2[3].append("嵌套的会变吗?") # 会的,因为里层元素的地址没变
li2.append("会变吗?") # 不会,因为新列表最外层是新的地址了
print(li, id(li), id(li[1]), id(3))
print(li2, id(li2), id(li2[1]), id(3))
# 深copy
li = [10000, "q", ["", 9], 7]
li2 = copy.deepcopy(li)
print(li, id(li), id(li[0]), id(li[2]))
print(li2, id(li2), id(li2[0]), id(li2[2])) # 哈哈,果然嵌套得列表地址不一样了
li[2].append(1000)
print(li, li2, id(li[2]), id(li2[2])) # 成功!
# 来试个嵌套嵌套
li = [1, [2, [3]]]
li2 = copy.deepcopy(li)
print(li, id(li[1][1]), li2, id(li2[1][1])) # 地址很像,但不一样了,差点看错。。。估计是迭代的把所有可变类型的数据给了新地址
li[1][1].append("会变吗")
print(li, id(li[1][1]), li2, id(li2[1][1])) # 假设成功,神奇啊 哈哈哈哈
运行结果如下:
E:\Python\python.exe E:/python_code_dir/Python_hight/Day_11/copy_test.py
abc 12768896
abc 12768896
abc 12768896
abc abc 32 12768896 12768896 49285504
[1, 2, 3] 12404176
[1, 2, 3] 12404176
[1, 2, 3] 12404176
[1, 2, 3, '别人会变吗?'] [1, 2, 3, '别人会变吗?'] [1, 2, 3, '别人会变吗?'] 12404176 12404176 12404176
[1000, 'sasasasasasasasasasasasasasasasasasasasasasasasasasasasasasa', 3, [12, '嵌套的会变吗?']] 86211600 13259224 1360779472
[1000, 'sasasasasasasasasasasasasasasasasasasasasasasasasasasasasasa', 3, [12, '嵌套的会变吗?'], '会变吗?'] 12825984 13259224 1360779472
[10000, 'q', ['', 9], 7] 12805984 86039520 86150280
[10000, 'q', ['', 9], 7] 86211600 86039520 12827144
[10000, 'q', ['', 9, 1000], 7] [10000, 'q', ['', 9], 7] 86150280 12827144
[1, [2, [3]]] 12825984 [1, [2, [3]]] 12827184
[1, [2, [3, '会变吗']]] 12825984 [1, [2, [3]]] 12827184 Process finished with exit code 0
还有一个数字符串里有多少数字的代码:
#!usr/bin/env/ python
# -*- coding:utf-8 -*-
# Author: XiaoFeng # 找字符串里有多少个数
o = -2
count = 0
x = input("<<<").strip()
for index, i in enumerate(x):
print(x)
if i.isalpha():
continue
if i.isdigit() and index == o + 1:
o = index
else:
count += 1
o = index
print(count)
# 升级版:
args = input("<<<:").strip()
for i in args:
print(args)
if i.isalpha():
args = args.replace(i, " ") # 用空格替换字母 这里的args 变了 但是改的是已经被i接收了的位 没改后面的,所以对后面没影响
final_list = args.split() # 默认以任意数量空格来分割成列表
print(len(final_list))
python3 完全理解赋值,浅copy,深copy 通过地址详细理解~的更多相关文章
- struts2从浅至深(二)详细配置
		
1.加载时机 当应用被服务器加载时,Struts的配置文件就已经加载了 2.加载顺序 default.properties------->struts-default.xml---------& ...
 - 铁乐学Python_day07_集合and浅谈深浅copy
		
1.[List补充] 在循环一个列表时,最好不要使用元素和索引进行删除操作,一旦删除,索引会随之改变,容易出错. 如果想不出错,可以采用倒着删除的方法,因为倒着删除进行的话,只是后面元素的位置发生了变 ...
 - python基础之赋值/深copy/浅copy
		
首先,不管是赋值还是深浅copy,都是针对那些可能会产生变化的值进行区分的,也就是对于数字,字符串来说,区分赋值,深浅copy是毫无意义的. 那么,让我们来对那些可变的像list set dict t ...
 - Python学习-赋值、浅copy和深copy
		
Python Copy: 在Python语言中,分为浅拷贝和深拷贝两种形式,也就是官方文档中的Shadow copy和Deep copy.在对简单的对象(object)进行复制时,两者没有区别,如下面 ...
 - python学习笔记-(六)深copy&浅copy
		
在python中,对象赋值实际上是对象的引用.当创建一个对象,然后把它赋给另一个变量的时候,python并没有拷贝这个对象,而只是拷贝了这个对象的引用. 1. 赋值 赋值其实只是传递对象引用,引用对象 ...
 - (五)聊一聊深Copy与浅Copy
		
一.关于浅copy与深copy 首先说明一下: 在python中,赋值其实就是对象的引用,变量就是对象的一个标签,如果把内存对象比喻成一个个房间,那么变量就是门牌号. 深copy与浅copy只是针对可 ...
 - 2  引用 深copy  浅copy
		
1. is == 总结 is 是比较两个引用是否指向了同一个对象(引用比较). == 是比较两个对象是否相等. In [1]: a = [11,22,33] In [2]: b = [11,22,33 ...
 - Python学习日记(六) 浅深copy
		
浅深copy即完全复制一份和部分复制一份 浅深copy在列表数据量较大时不建议使用,比较消耗内存资源 1.赋值运算 l1 = [1,'s',[1,2,3]] l2 = l1 print(id(l1), ...
 - python中深copy,浅copy与赋值语句的区别
		
以下详细讲解:python深复制,浅复制与赋值语句的区别 1. '='赋值语句,常规复制只是将另一个变量名关联到了列表,并不进行副本复制,实例如下: var1=[12,35,67,91,101]var ...
 
随机推荐
- mac下的readelf和objdump
			
ELF文件包括: (1)可重定位的目标文件 (2)可执行的目标文件 (3)可被共享的目标文件 可以用file命令来看目标文件是否是ELF文件 在linux下,用readelf来看ELF头部或者其它各s ...
 - OOP编程七大原则
			
OCP(Open-Closed Principle),开放封闭原则:软件实体应该扩展开放.修改封闭.实现:合理划分构件,一种可变性不应当散落在代码的很多角落里,而应当被封装到一个对象里:一种可变性不应 ...
 - 跟我学ASP.NET MVC之八:SportsStrore移动设备
			
摘要: 现在的web程序开发避免不了智能手机和平板电脑上的使用,如果你希望发布你的应用程序给更广大客户使用的话,你将要拥抱可移动web浏览器的世界.向移动设备用户发布一个好的使用体验是很困难的-比只是 ...
 - pymongo连接MongoDB
			
导语 pymongo 是目前用的相对普遍一个python用来连接MongoDB的库,是工作中各种基本需求都能满足具体api可以参考 pymongo APIpymongo github 安装 Mongo ...
 - IE下获取XPATH小工具,支持32/64位
			
背景是曾经友情支持了测试组一小段时间,发现他们使用selenium做页面的自动化测试,需要用到XPath,但IE下没有获取XPath的工具,只能在Firefox和chrome下获取,步骤还比较麻烦.而 ...
 - Java 读书笔记 (十一) Number & Math 类
			
所有的包装类(Integer.Long.Byte.Double.Float.Short)都是抽象类Number的子类. 这种由编译器特别支持的包装称为装箱,所以当内置数据类型被当作对象使用的时候,编译 ...
 - Instrumentation(1)
			
Instrumentation介绍: JavaInstrumentation指的是可以用独立于应用程序之外的代理(agent)程序来监测和协助运行在JVM上的应用程序.这种监测和协助包括但不限于获取J ...
 - Tensorflow学习-数据读取
			
Tensorflow数据读取方式主要包括以下三种 Preloaded data:预加载数据 Feeding: 通过Python代码读取或者产生数据,然后给后端 Reading from file: 通 ...
 - BZOJ_3669_[Noi2014]魔法森林_LCT
			
BZOJ_3669_[Noi2014]魔法森林_LCT Description 为了得到书法大家的真传,小E同学下定决心去拜访住在魔法森林中的隐士.魔法森林可以被看成一个包含个N节点M条边的无向图,节 ...
 - IE浏览器下ajax和缓存的那些事儿
			
项目经理最近返回了一些问题: (客户浏览器为IE11,本地360,谷歌没发现任何问题) 1.加载页面时下拉框中没有数据,关闭之后再打开出现数据: 2.数据保存之后页面没有刷新: 我也是接手别人的项目, ...