在python中,我们使用变量时,并没有声明变量的存在和类型。类型是在运行过程中自动决定的。
a = 3
python将会执行三步去完成上面这个请求。
1.创建一个对象代表3
2.创建一个变量a,如果a未创建。
3.将变量a与对象3相连接。
可以将变量a看作对象3的一个引用。
a = 3
b = a
多个变量可以指向同一个对象,在Python中叫共享引用。
Python在每个对象中保持了一个计数器,用于记录当前指向该对象的引用的数目,一旦计数器被设置为0,该对象的内存空间就会自动回收。
原处修改对象
由于共享引用的存在,有一些对象和操作会在原处修改对象。
Python中对象可分为可变类型对象和不可变类型对象。
可变对象:列表,字典
不可变对象:数字,字符串,元组
如果变量是不可变对象的引用,对变量名的修改不会影响其他变量,而是直接连接到修改的对象。
a = 3
b = a
print(a)# 3
print(b)# 3a = 4
print(a)# 4
print(b)# 3
如果变量是可变对象的引用,对变量名的修改会影响其他变量。
a = [1,2,3]
b = a
print(a)# [1, 2, 3]
print(b)# [1, 2, 3]a[0] = 4
print(a)# [4, 2, 3]
print(b)# [4, 2, 3]
拷贝
所以当你需要创建一个与原列表一样同时又独立于原列表的列表时,可以使用拷贝。
下面介绍最常用的两种。
a = [1,2,3]
b = a[:]
print(a)# [1, 2, 3]
print(b)# [1, 2, 3]a[0] = 4
print(a)# [4, 2, 3]
print(b)# [1, 2, 3]
此时b引用的是a所引用的对象的拷贝。a,b指向不同的内存区域。
在字典和集合中,无法使用这种方法。
可以使用标准库中的copy模块
import copy
a = [1,2,[3]]
b = copy.copy(a)# 浅拷贝
c = copy.deepcopy(a)# 深拷贝a[0] = 0
a[-1].append(4)print(a)# [0, 2, [3, 4]]
print(b)# [1, 2, [3, 4]]
print(c)# [1, 2, [3]]
浅拷贝中可变对象中嵌套的可变对象的引用还是原来的引用。
深拷贝可以拷贝嵌套的对象结构。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。
本文向大家介绍Jmeter参数化实现原理及过程解析,包括了Jmeter参数化实现原理及过程解析的使用技巧和注意事项,需要的朋友参考一下 背景: 在实际的测试工作中,我们经常需要对多组不同的输入数据,进行同样的测试操作步骤,以验证我们的软件的功能。这种测试方式在业界称为数据驱动测试,而在实际测试工作中,测试工具中实现不同数据输入的过程称为参数化设置。 jmeter提供多种参数化设置的方式,常用的有:
本文向大家介绍Nginx配置https原理及实现过程详解,包括了Nginx配置https原理及实现过程详解的使用技巧和注意事项,需要的朋友参考一下 使用linux实用工具certbot来生成https证书 这个工具是生成Let's Encrypt证书, Let's Encrypt数字证书认证机构,Let's Encrypt 是由互联网安全研究小组(ISRG,一个公益组织)提供的服务 提供免费的SS
本文向大家介绍Spring CGLlB动态代理实现过程解析,包括了Spring CGLlB动态代理实现过程解析的使用技巧和注意事项,需要的朋友参考一下 JDK 动态代理使用起来非常简单,但是它也有一定的局限性,这是因为 JDK 动态代理必须要实现一个或多个接口,如果不希望实现接口,则可以使用 CGLIB 代理。 CGLIB(Code Generation Library)是一个高性能开源的代码生成
本文向大家介绍Python DES加密实现原理及实例解析,包括了Python DES加密实现原理及实例解析的使用技巧和注意事项,需要的朋友参考一下 加密流程 首先说一下置换的意思,比如说有5678这个字符串,置换表为2143,置换表中的数表示的是位置,所以字符串变成6587。所有的置换表在程序中。(S盒置换不一样,会另外说明) 密钥部分 把8位字符串密钥变成2进制(好像密钥只可以是8位,这一块我
本文向大家介绍iOS实现远程推送原理及过程,包括了iOS实现远程推送原理及过程的使用技巧和注意事项,需要的朋友参考一下 推送通知,是现在的应用必不可少的功能。那么在 iOS 中,我们是如何实现远程推送的呢?iOS 的远程推送原理又是什么呢?在做 iOS 远程推送时,我们会遇到各种各样的问题。那么首先让我们准备一些做推送需要的东西。我们需要一个付费的苹果开发者账号(免费的不可以做远程推送),有了开发
本文向大家介绍Spring JDK动态代理实现过程详解,包括了Spring JDK动态代理实现过程详解的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了Spring JDK动态代理实现过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1. 创建项目 在 MyEclipse 中创建一个名称为 springDemo03 的 Web 项