变量


变量定义的规则:

  变量名只能是 字母、数字或下划线的任意组合
  变量名的第一个字符不能是数字
  以下关键字不能声明为变量名
  ['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', 'return', 'try',   'while', 'with', 'yield']

 

实例:

name="Alex Li"
name2=name
print("My name is ",name,name2)

name="PaoChe Ge"

print(name,name2)

————————结果————————
My name is  Alex Li Alex Li
PaoChe Ge Alex Li

分析:

  

 

 

name、name2首先执行Alex Li,然后name改为指向PaoChe Ge,而name不改变

 

Python中的赋值(复制)、浅拷贝、深拷贝之间的区别

 

  1.赋值: 只是复制了新对象的引用,不会开辟新的内存空间。
  2.浅拷贝: 创建新对象,其内容是原对象的引用。
    浅拷贝有三种形式:切片操作,工厂函数,copy模块中的copy函数。
    如: lst = [1,2,3,[4,5]] 
    切片操作:lst1 = lst[:] 或者 lst1 = [each for each in lst]
    工厂函数:lst1 = list(lst)
    copy函数:lst1 = copy.copy(lst)

    浅拷贝之所以称为浅拷贝,是它仅仅只拷贝了一层,在lst中有一个嵌套的list[4,5],如果我们修改了它,情况就不一样了。

  3.深拷贝:只有一种形式,copy模块中的deepcopy函数。
     和浅拷贝对应,深拷贝拷贝了对象的所有元素,包括多层嵌套的元素。
     深拷贝出来的对象是一个全新的对象,不再与原来的对象有任何关联。

  详情浏览:http://python.jobbole.com/82294/

will = ["Will",28,["Python","C#","JavaScript"]]
wilber = will
print(id(will))
print(will)
print([id(ele) for ele in will])

print(id(wilber))
print(wilber)
print([id(ele) for ele in wilber])


will[0]="Wilber"
will[2].append("CSS")
print(id(will))
print(will)
print([id(ele) for ele in will])

print(id(wilber))
print(wilber)
print([id(ele) for ele in wilber])


--------结果---------
4867056
['Will', 28, ['Python', 'C#', 'JavaScript']]
[2339904, 498161824, 6659928]
4867056
['Will', 28, ['Python', 'C#', 'JavaScript']]
[2339904, 498161824, 6659928]
4867056
['Wilber', 28, ['Python', 'C#', 'JavaScript', 'CSS']]
[6649696, 498161824, 6659928]
4867056
['Wilber', 28, ['Python', 'C#', 'JavaScript', 'CSS']]
[6649696, 498161824, 6659928]
赋值
#浅拷贝
import copy

will=["Will",28,["Pyhon","C#","JavaScirpt"]]
wilber=copy.copy(will)

print(id(will))
print(will)
print([id(ele) for ele in will])

print(id(wilber))
print(wilber)
print([id(ele) for ele in wilber])


will[0]="Willer"
will[2].append("CSS")
print(id(will))
print(will)
print([id(ele) for ele in will])

print(id(wilber))
print(wilber)
print([id(ele) for ele in wilber])


--------结果-------------
41425536
['Will', 28, ['Pyhon', 'C#', 'JavaScirpt']]
[33666112, 496064672, 41425296]
41212304
['Will', 28, ['Pyhon', 'C#', 'JavaScirpt']]
[33666112, 496064672, 41425296]
41425536
['Willer', 28, ['Pyhon', 'C#', 'JavaScirpt', 'CSS']]
[41056096, 496064672, 41425296]
41212304
['Will', 28, ['Pyhon', 'C#', 'JavaScirpt', 'CSS']]
[33666112, 496064672, 41425296]
浅拷贝
import copy
will = ["Will", 28, ["Python", "C#", "JavaScript"]]
wilber=copy.deepcopy(will)

print(id(will))
print(will)
print([id(ele) for ele in will])

print(id(wilber))
print(wilber)
print([id(ele) for ele in wilber])

will[0] = "Wilber"
will[2].append("CSS")
print (id(will))
print (will)
print ([id(ele) for ele in will])

print (id(wilber))
print (wilber)
print ([id(ele) for ele in wilber])


--------------结果------------
7674496
['Will', 28, ['Python', 'C#', 'JavaScript']]
[4502592, 494950560, 7674256]
6281616
['Will', 28, ['Python', 'C#', 'JavaScript']]
[4502592, 494950560, 6281816]
7674496
['Wilber', 28, ['Python', 'C#', 'JavaScript', 'CSS']]
[6125408, 494950560, 7674256]
6281616
['Will', 28, ['Python', 'C#', 'JavaScript']]
[4502592, 494950560, 6281816]
深拷贝

 

posted @ 2018-09-27 16:33  南航海军上校  阅读(93)  评论(0)    收藏  举报