Pythonã®copyãdeepcopyã§ãªããžã§ã¯ããã³ããŒããæ¹æ³ã解説
Pythonã®copyãšdeepcopy颿°ã䜿ã£ãŠããªããžã§ã¯ãã倿ž¡ãã§ã³ããŒããæ¹æ³ã«ã€ããŠè§£èª¬ããŸããPythonã§å©çšãããªããžã§ã¯ãã®çš®é¡ãå€ãæž¡ãæ¹æ³ã«ã€ããŠã解説ããŠããŸãã®ã§ãcopyã®äœ¿ãæ¹ãåãããªããšããå Žåã«ã¯ç¢ºèªããŠã¿ãŠãã ãããPythonã®copyãšã¯
Pythonã®copyãšdeepcopy颿°ã¯ãã©ã¡ãããªããžã§ã¯ããã³ããŒãããšãã«äœ¿ããŸãã
copyã¢ãžã¥ãŒã«ãimportããããšã§å©çšã§ããŸãã
copyã¢ãžã¥ãŒã«ã¯PythonãæäŸããã¢ãžã¥ãŒã«ã®äžã€ã§ããªããžã§ã¯ããã³ããŒããŠããããå¥ã®ãªããžã§ã¯ããšããŠä¿ç®¡ããããšãã§ããŸãã
ä»åã¯Pythonã®copyã§ãªããžã§ã¯ããã³ããŒããæ¹æ³ãdeepcopyãšã®éãã«ã€ããŠè§£èª¬ããŸãã
ãªããžã§ã¯ãã®çš®é¡ãéå±€ã®æ·±ãã«ãã£ãŠã¯ããŸãã³ããŒã§ããªãããšãããã®ã§ããã¡ãã«ã€ããŠã解説ããŠããŸãã
copy颿°ã®èšè¿°æ¹æ³ã¯äžèšã®éãã§ãã
test1 = test.copy()
ã³ããŒãããå€ã®åŸãã«copy颿°ãèšè¿°ããŠå©çšããŸãã
Pythonã§copyã䜿çšããéã«ã¯ãã¥ãŒã¿ãã«ãã€ãã¥ãŒã¿ãã«ãšãã£ããªããžã§ã¯ãã®çš®é¡ããåç
§æž¡ãã倿ž¡ããšãã£ãåŒæ°ã®æž¡ãæ¹ã®çš®é¡ã«ã€ããŠãçè§£ããŠããå¿
èŠããããŸãã
ããã§copyã®äœ¿ãæ¹ã®è§£èª¬ã«å ¥ãåã«ããŸããªããžã§ã¯ãã®çš®é¡ã«ã€ããŠè§£èª¬ããŸãã
ãªããžã§ã¯ãã®ãã¥ãŒã¿ãã«ãšã€ãã¥ãŒã¿ãã«ã«ã€ããŠ
Pythonã«ã¯ä»£å ¥ããŠå€ã倿Žã§ãããã¥ãŒã¿ãã«ãªãªããžã§ã¯ããšãå€ã倿Žã§ããªãã€ãã¥ãŒã¿ãã«ãªãªããžã§ã¯ãã®2çš®é¡ãååšããŸãã
| ãªããžã§ã¯ãã®çš®é¡ | ããŒã¿ã®çš®é¡ |
|---|---|
| ãã¥ãŒã¿ãã« | listãdictãsetãbytearrayãªã© |
| ã€ãã¥ãŒã¿ãã« | intãfloatãstrãtupleãbytesãfrozensetãªã© |
ãã¥ãŒã¿ãã«ãªãªããžã§ã¯ãã¯åç §ãããªããžã§ã¯ããå ±æãªã®ã§ãä»£å ¥ããå€ã倿Žããããšãã§ããŸããå察ã«ã€ãã¥ãŒã¿ãã«ãªãªããžã§ã¯ãã¯åç §ãããªããžã§ã¯ããç°ãªããŸãã
ãã¥ãŒã¿ãã«
test1 = ['a','b','c']
test2 = test1
test1.append('d')
print (test1)
print (test2)
print('id(test1) = %s' % id(test1))
print('id(test2) = %s' % id(test2))
å®è¡çµæ
['a', 'b', 'c', 'd']
['a', 'b', 'c', 'd']
#åããªããžã§ã¯ããåç
§ããŠãã
id(test1) = 22668883604800
id(test2) = 22668883604800
Pythonã®ãªããžã§ã¯ãã«ã¯ãã¹ãŠããªããžã§ã¯ãIDããšåŒã°ããåºæã®IDãå²ãæ¯ãããŠãããããã¯id颿°ã§ç¢ºèªããããšãã§ããŸãã
äžèšã®äŸã§ã¯id颿°ã«ãã£ãŠãªããžã§ã¯ãIDã調ã¹ãŠããŸãã
ãã®çµæããªããžã§ã¯ãIDãåäžãªã®ã§åããªããžã§ã¯ããåç
§ããŠããã®ãåãããŸãã
ã€ãã¥ãŒã¿ãã«
test1 = 10
test2 = test1
print('test1 =',test1)
print('test2 =',test2)
print('test1 = %s' % id(test1))
print('test2 = %s' % id(test2))
test1 = 0
print('test1 =',test1)
print('test2 =',test2)
print('test1 = %s' % id(test1))
print('test2 = %s' % id(test2))
å®è¡çµæ
test1 = 10
test2 = 10
test1 = 9801536
test2 = 9801536
test1 = 0
test2 = 10
test1 = 9801216
test2 = 9801536
倿°test2ãžå€æ°test1ã代å
¥ããæ®µéã§ã¯ãIDã9801536ããšããåäžã®ãªããžã§ã¯ããçæãããç¶æ
ã§ãã
ãã®ç¶æ
ã§test1ã«0ã代å
¥ããŠã¿ãŸãã
æ°åã¯ã€ãã¥ãŒã¿ãã«ãªãªããžã§ã¯ããªã®ã§å¥ã®ãªããžã§ã¯ããçæãããtest1ã®å€ã¯0ãšãªããŸãã
ãã®ããšã¯test1ã®ãªããžã§ã¯ãIDãå€åããããšããåãããŸãã
test2ã®æ¹ã¯äœãå€åããŠããŸããã
倿ž¡ããšåç §æž¡ãã«ã€ããŠ
åç §æž¡ãã¯å€æ°ãå ±æããæž¡ãæ¹ã§ããã¥ãŒã¿ãã«ãªããžã§ã¯ãã®ããã«åããªããžã§ã¯ããåç §ããã®ãç¹åŸŽã§ããPythonã§ã¯ã倿°å士ã§å€ãä»£å ¥ãããšåç §æž¡ãã«ãªããŸãã倿ž¡ãã¯å€æ°ã®å€ãã³ããŒããŠæž¡ããå ã®ãªããžã§ã¯ãã¯åœ±é¿ãåããŸãããã€ãŸãåç §å ãç°ãªãã®ã§ãã
åç §æž¡ã
test = ['apple', 'orange']
test1 = test
test[0] = 'peach'
print('test =',test)
print('test1 =',test1)
print('test = %s' % id(test))
print('test1 = %s' % id(test1))
å®è¡çµæ
test = ['peach', 'orange']
test1 = ['peach', 'orange']
test = 23120715507008
test1 = 23120715507008
倿°test1ã«liståã§ãã倿°testã代å
¥ãããã®åŸtestã®äžèº«ãæžãæããŠããŸãã
çµæãšããŠtestãtest1äž¡æ¹ã®listå
ã§ãappleããšããæååããpeachããšããæååã«å€åããŠãããåç
§ããŠãããªããžã§ã¯ãã®IDãåäžã§ãã
ããã倿ž¡ãã«ãããå Žåã«copy颿°ã䜿çšããŸãã
倿ž¡ã
test = ['apple', 'orange']
print('test = %s' % id(test))
test1 = test.copy()
print('test1 = %s' % id(test1))
å®è¡çµæ
test = 23411624473920
test1 = 23411623595328
ãã¥ãŒã¿ãã«ãªããžã§ã¯ãã§ããé
åã代å
¥ããã倿°ã«copy颿°ã䜿ãããšã§ãæ°ãã«ãªããžã§ã¯ããçæãããŠå€æž¡ããã§ããŸãã
id颿°ã®å®è¡çµæã§ãåããããã«ãcopyã䜿ãããšã§çæããããªããžã§ã¯ãã¯å¥ã®ãã®ã§ãã
copyã®äœ¿ãæ¹
å®éã«copy颿°ã䜿ã£ãŠå€æž¡ãããæ¹æ³ããµã³ãã«ã³ãŒãã§è§£èª¬ããŸãã
import copy #ã¢ãžã¥ãŒã«ãã€ã³ããŒã
test = ['apple', 'orange']
test1 = test.copy()
test.append('peach')
print('test = ', test)
print('test = %s' % id(test))
print('test1 = ', test1)
print('test1 = %s' % id(test1))
å®è¡çµæ
test = ['apple', 'orange', 'peach']
test = 22789604275520
test1 = ['apple', 'orange']
test1 = 22789603397056
copy颿°ã䜿ã£ãŠçæããããªããžã§ã¯ãã¯ãªããžã§ã¯ãIDãç°ãªãã®ã§ãããããå¥ã®ãªããžã§ã¯ããåç
§ããŠããããšãåãããŸãã
ãŸãããªããžã§ã¯ããå¥ãªã®ã§å€æ°testã«append颿°ã§å€ãä»ãè¶³ããŠãtest1ã¯ãã®åœ±é¿ãåããŠããªãããšãåãããŸãã
copyãšdeepcopyã®éã
copy颿°ã§æ£ç¢ºã«ã³ããŒã§ããç¯å²ã«ã¯éããããã2次å
é
åã«ãªããšæ£ç¢ºã«ã³ããŒã§ããªããªããŸãã
deepcopyã¯copyã¢ãžã¥ãŒã«ã«å«ãŸããã¡ãœããã®ã²ãšã€ã§ãååã®éãæ·±ãéå±€ã®ãªããžã§ã¯ããã³ããŒããããã«äœ¿ããŸãã
ã³ããŒã§ããéå±€ãéããããcopyã¯æµ
ãã³ããŒã§deepcopyã¯æ·±ãã³ããŒãšåŒã°ããŠããŸãã
deepcopyã¯ãcopy颿°ã§ã³ããŒã§ããªãéå±€ã®ãªããžã§ã¯ããã³ããŒããããšãã«äœ¿ããŸãã
deepcopyã®äœ¿ãæ¹
deepcopyã®èšè¿°æ¹æ³ã¯copy颿°ãšåãã§ãã
test1 = test.deepcopy()
copyãšdeepcopyã®éãã«ã€ããŠã倿¬¡å é åãäŸã«è§£èª¬ããŸãã
copyã®å Žå
import copy
test = [['a', 'b'], ['c', 'd']]
test1 = test.copy()
test[1].append('e')
print('test = ', test)
print('test = %s' % id(test))
print('test1 = ', test1)
print('test1 = %s' % id(test1))
å®è¡çµæ
test = [['a', 'b'], ['c', 'd', 'e']]
test = 23037493484800
test1 = [['a', 'b'], ['c', 'd', 'e']]
test1 = 23037493484864
ãªããžã§ã¯ãã¯å¥ã§ãã倿°testã«å ãã倿Žãtest1ã«åæ ãããŠããŸãã
ããŸã倿ž¡ãã§ããŠããããæ£ããã³ããŒãããããšã«ã¯ãªããŸããã
deepcopyã®å Žå
import copy
test = [['a', 'b'], ['c', 'd']]
test1 = copy.deepcopy(test)
test[1].append('e')
print('test = ', test)
print('test = %s' % id(test))
print('test1 = ', test1)
print('test1 = %s' % id(test1))
å®è¡çµæ
test = [['a', 'b'], ['c', 'd', 'e']]
test = 22764581496320
test1 = [['a', 'b'], ['c', 'd']]
test1 = 22764581495680
deepcopyã§ã³ããŒãããšã倿°testã«å ããæååãeããåæ ãããŠãããããªããžã§ã¯ãIDãç°ãªãã®ã§æ£ç¢ºã«å€æž¡ãã§ããŸããã
ãŸãšã
ãªããžã§ã¯ããã³ããŒããããšãã¯ãéå±€ã®æ·±ãã«ãã£ãŠcopyãšdeepcopy颿°ã䜿ãåããŸããããé åãŸã§ã®æ·±ãã§ããã°copy颿°ã倿¬¡å é å以äžã®æ·±ãã§ããã°deepcopy颿°ã䜿ãããšã§æ£ç¢ºã«ã³ããŒã§ããŸãã
ãŸããPythonã®ç¹åŸŽã§ãããªããžã§ã¯ãã®çš®é¡ãå€ã®æž¡ãæ¹ãæ··åããæ¹ã¯ãäžèšã®ããã«ãŸãšãããšèŠããããã§ãããã
- åããªããžã§ã¯ããåç §ããïŒãã¥ãŒã¿ãã«ãªãªããžã§ã¯ããåç §æž¡ã
- ãªããžã§ã¯ããç¬ç«ããŠããïŒã€ãã¥ãŒã¿ãã«ãªãªããžã§ã¯ãã倿ž¡ã
Pythonã®ãªããžã§ã¯ããã³ããŒããããšãã®åèã«ããŠã¿ãŠãã ããã













