Computer368106 views
高校倫理1440106 views
高校物理160203 views
数学講師2886227 views
小学算数1200427 views
教育149510 views
高校日本史190571 views
いろは3010814 views
中学英語811710 views
高校化学2924392 views
Help
Tools
NewsSpreadsheetCalendarSlidesTier ListPen ToolIllustrationCrayonPixel ArtASCII ArtPerspectiveEndless StairsGraphMind MapER DiagramFamily TreeMemeCurved TextImage EditorMosaicRetro FilterPencil SketchOCR/HighlighterMakeup EditorFaviconVideo TrimmerScrolling VideoVideo TitleColor PickerColor ExtractorBonfireFireworksWater RippleWater SplashBreaking GlassWood GrainMarble TextureCSS ButtonIcon MakerBar ChartGrouped Bar ChartStacked Bar ChartPie ChartLine ChartArea ChartStacked Area ChartScatter Plot3D Bar Chart3D Pie ChartBar Chart RaceBubble ChartPopulation PyramidPictogramEarningsCandlestick ChartInvestment RiskMortgage SimulatorCalculatorMatrix CalculatorFunction GraphPolynomial ExpansionVenn DiagramField VisualizerRubik's Cube Group TheoryTraveling SalesmanVoronoi and DelaunayFractalColumn ArithmeticDraw Math FiguresArithmetic AnimationArithmetic Word ProblemsCounting with Tree DiagramsCube NetsCross SectionsMotion PathMechanicsWavesLight and LensesThermodynamicsHow Semiconductors WorkMolecular StructuresAtomic OrbitalsElectrochemical CellsChemical EquilibriumCrystal LatticesBuffer pHComplex IonsDNA Double HelixCell DivisionMembrane ChannelsNerve ImpulseRock ClassificationWeatherConstellationsSolar and Lunar Eclipses3D ModelingFloor PlanSeismic StructuresIntersection TurnMaglevCooking AnimationOrigamiLive Viewer CountGeoJSON MapRailway MapPopulation MapCrime MapLand Price MapSchool MapShrine and Castle MapHouse of Representatives MapWord MapSolitaireReversiHakoiri MusumeChessHamburgerRippleSlide Puzzle MakerNeon PinballNovel MakerJapanese Typing PracticePiano Score EditorMusic Theory

English

辞書にリストがあるときの copy と deepcopy - Python

辞書の値にリストがある場合、copy と deepcopy の違いが明らかになります。

import copy

days = {'Monday': 9, 'Tuesday': [1, 2]}

shallow_copy = copy.copy(days)
deep_copy = copy.deepcopy(days)

days['Monday'] = 100
days['Sunday'] = 5
days['Tuesday'].append(3)

print(days)
# {'Monday': 100, 'Tuesday': [1, 2, 3], 'Sunday': 5}

print(shallow_copy)
# {'Monday': 9, 'Tuesday': [1, 2, 3]}

print(deep_copy)
# {'Monday': 9, 'Tuesday': [1, 2]}

一般に、通常の copy は shallow copy と呼ばれます。この記事では

と翻訳し、元データの(値の)変更がコピー先に与える影響を「作用」と言います。これらの用語を使うと、上のコードは次のように解釈できます。

  • 弱いコピーは整数の作用を受けない
  • 強いコピーは整数の作用を受けない
  • 弱いコピーはリストの作用を受ける
  • 強いコピーはリストの作用を受けない

補足:弱いコピーと強いコピーにあるリストの id

オリジナルと shallow copy は同一のリストを「見ています」。

import copy

days = {'Monday': 9, 'Tuesday': [1, 2]}

shallow_copy = copy.copy(days)
deep_copy = copy.deepcopy(days)

print(id(days['Tuesday']))
# 4340730176

print(id(shallow_copy['Tuesday']))
# 4340730176

print(id(deep_copy['Tuesday']))
# 4340731968