@@ -138,7 +138,7 @@ def _get_args(self):
138138def _copy_items (items ):
139139 if items is None :
140140 return []
141- # The copy module is used only in the 'append' and 'append_const '
141+ # The copy module is used only in the 'append', 'append_const', and 'extend '
142142 # actions, and it is needed only when the default value isn't a list.
143143 # Delay its import for speeding up the common case.
144144 if type (items ) is list :
@@ -835,7 +835,7 @@ def _get_kwargs(self):
835835 def format_usage (self ):
836836 return self .option_strings [0 ]
837837
838- def __call__ (self , parser , namespace , values , option_string = None ):
838+ def __call__ (self , parser , cache , namespace , values , option_string = None ):
839839 raise NotImplementedError (_ ('.__call__() not defined' ))
840840
841841
@@ -866,7 +866,7 @@ def __init__(self,
866866 deprecated = deprecated )
867867
868868
869- def __call__ (self , parser , namespace , values , option_string = None ):
869+ def __call__ (self , parser , cache , namespace , values , option_string = None ):
870870 if option_string in self .option_strings :
871871 setattr (namespace , self .dest , not option_string .startswith ('--no-' ))
872872
@@ -907,7 +907,7 @@ def __init__(self,
907907 metavar = metavar ,
908908 deprecated = deprecated )
909909
910- def __call__ (self , parser , namespace , values , option_string = None ):
910+ def __call__ (self , parser , cache , namespace , values , option_string = None ):
911911 setattr (namespace , self .dest , values )
912912
913913
@@ -932,7 +932,7 @@ def __init__(self,
932932 help = help ,
933933 deprecated = deprecated )
934934
935- def __call__ (self , parser , namespace , values , option_string = None ):
935+ def __call__ (self , parser , cache , namespace , values , option_string = None ):
936936 setattr (namespace , self .dest , self .const )
937937
938938
@@ -1007,9 +1007,13 @@ def __init__(self,
10071007 metavar = metavar ,
10081008 deprecated = deprecated )
10091009
1010- def __call__ (self , parser , namespace , values , option_string = None ):
1010+ def __call__ (self , parser , cache , namespace , values , option_string = None ):
10111011 items = getattr (namespace , self .dest , None )
1012- items = _copy_items (items )
1012+
1013+ if self .dest not in cache :
1014+ cache .add (self .dest )
1015+ items = _copy_items (items )
1016+
10131017 items .append (values )
10141018 setattr (namespace , self .dest , items )
10151019
@@ -1036,9 +1040,13 @@ def __init__(self,
10361040 metavar = metavar ,
10371041 deprecated = deprecated )
10381042
1039- def __call__ (self , parser , namespace , values , option_string = None ):
1043+ def __call__ (self , parser , cache , namespace , values , option_string = None ):
10401044 items = getattr (namespace , self .dest , None )
1041- items = _copy_items (items )
1045+
1046+ if self .dest not in cache :
1047+ cache .add (self .dest )
1048+ items = _copy_items (items )
1049+
10421050 items .append (self .const )
10431051 setattr (namespace , self .dest , items )
10441052
@@ -1061,7 +1069,7 @@ def __init__(self,
10611069 help = help ,
10621070 deprecated = deprecated )
10631071
1064- def __call__ (self , parser , namespace , values , option_string = None ):
1072+ def __call__ (self , parser , cache , namespace , values , option_string = None ):
10651073 count = getattr (namespace , self .dest , None )
10661074 if count is None :
10671075 count = 0
@@ -1084,7 +1092,7 @@ def __init__(self,
10841092 help = help ,
10851093 deprecated = deprecated )
10861094
1087- def __call__ (self , parser , namespace , values , option_string = None ):
1095+ def __call__ (self , parser , cache , namespace , values , option_string = None ):
10881096 parser .print_help ()
10891097 parser .exit ()
10901098
@@ -1108,7 +1116,7 @@ def __init__(self,
11081116 help = help )
11091117 self .version = version
11101118
1111- def __call__ (self , parser , namespace , values , option_string = None ):
1119+ def __call__ (self , parser , cache , namespace , values , option_string = None ):
11121120 version = self .version
11131121 if version is None :
11141122 version = parser .version
@@ -1191,7 +1199,7 @@ def add_parser(self, name, *, deprecated=False, **kwargs):
11911199 def _get_subactions (self ):
11921200 return self ._choices_actions
11931201
1194- def __call__ (self , parser , namespace , values , option_string = None ):
1202+ def __call__ (self , parser , cache , namespace , values , option_string = None ):
11951203 parser_name = values [0 ]
11961204 arg_strings = values [1 :]
11971205
@@ -1228,9 +1236,13 @@ def __call__(self, parser, namespace, values, option_string=None):
12281236 getattr (namespace , _UNRECOGNIZED_ARGS_ATTR ).extend (arg_strings )
12291237
12301238class _ExtendAction (_AppendAction ):
1231- def __call__ (self , parser , namespace , values , option_string = None ):
1239+ def __call__ (self , parser , cache , namespace , values , option_string = None ):
12321240 items = getattr (namespace , self .dest , None )
1233- items = _copy_items (items )
1241+
1242+ if self .dest not in cache :
1243+ cache .add (self .dest )
1244+ items = _copy_items (items )
1245+
12341246 items .extend (values )
12351247 setattr (namespace , self .dest , items )
12361248
@@ -1941,6 +1953,7 @@ def _parse_known_args(self, arg_strings, namespace):
19411953 # converts arg strings to the appropriate and then takes the action
19421954 seen_actions = set ()
19431955 seen_non_default_actions = set ()
1956+ cache = set ()
19441957 warned = set ()
19451958
19461959 def take_action (action , argument_strings , option_string = None ):
@@ -1960,7 +1973,7 @@ def take_action(action, argument_strings, option_string=None):
19601973 # take the action if we didn't receive a SUPPRESS value
19611974 # (e.g. from a default)
19621975 if argument_values is not SUPPRESS :
1963- action (self , namespace , argument_values , option_string )
1976+ action (self , cache , namespace , argument_values , option_string )
19641977
19651978 # function to convert arg_strings into an optional action
19661979 def consume_optional (start_index ):
0 commit comments